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)); }
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); }
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())); }