Beispiel #1
0
        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()
            });
        }
Beispiel #2
0
 protected void AddOrdering(Expression <Func <T, object> > expression)
 {
     OrderByExpressions.Add(expression);
 }