public async Task <CollectionQueryResponse <TItem> > Handle(TPagedQueryRequest request, CancellationToken cancellationToken) { var query = await Filter(request); IOrderedQueryable <TEntity>?orderedQuery = null; if (request.SortOrder != null) { foreach (var col in request.SortOrder) { var colName = col.Name.ToLower(); if (!OrderByExpressions.ContainsKey(colName)) { continue; } orderedQuery = StrongTypeOrderBy(OrderByExpressions[colName], orderedQuery, query, col.Direction); } } orderedQuery ??= StrongTypeOrderBy(DefaultOrderBy(), query); request.PageSize = request.PageSize < 0 ? 0 : request.PageSize; return(new CollectionQueryResponse <TItem>() { Items = orderedQuery .Skip(request.Page * request.PageSize) .Take(request.PageSize) .Select(Map()), TotalItems = query.Count() }); }
protected void AddOrdering(Expression <Func <T, object> > expression) { OrderByExpressions.Add(expression); }