예제 #1
0
        protected virtual IQueryable <TEntity> Sort(IQueryable <TEntity> query, GetManyQuery <TFilter> request)
        {
            if (!request.IsSortingEmpty())
            {
                return(request.SortOrder == SortOrder.Desc
                    ? query.OrderByDesc(request.OrderBy)
                    : query.OrderBy(request.OrderBy));
            }

            return(query.OrderBy(e => e.Id));
        }
예제 #2
0
        protected virtual IQueryable <T> Paginate <T>(IQueryable <T> query, GetManyQuery <TFilter> request)
        {
            if (!request.IsPaginationEmpty())
            {
                return(query
                       .Skip(request.Start.Value)
                       .Take(request.End.Value - request.Start.Value));
            }

            return(query);
        }
예제 #3
0
        public async Task <GetManyResult <TOutput> > GetMany(GetManyQuery <TFilter> q)
        {
            var query = GetQuery();

            query = FilterByIds(query, q.Ids);
            query = Filter(query, q.Filters);
            query = Sort(query, q);

            return(new GetManyResult <TOutput>(await query.CountAsync(),
                                               (await Paginate(query, q).ToListAsync())
                                               .Select(ToOutput)
                                               .ToList()));
        }