Beispiel #1
0
        public static IQueryable <TDomain> ApplyTableRequestIQueryable <TEntity, TDomain, TKey>(this IQueryable <TEntity> query, ListRequest request, params SortOrder[] sortOrders)
            where TEntity : IEntity <TKey>
            where TDomain : IDomainBase <TKey>
        {
            var domainQuery = query.ProjectTo <TDomain>();

            Defensive.AssertNotNull(domainQuery);

            if (request.Filters.Any())
            {
                domainQuery = domainQuery.Where(FilterExpressionCreator.CreateFilterExpression <TEntity, TDomain>(request.Filters));
            }

            domainQuery = Sort <TDomain, TKey>(domainQuery, sortOrders, request.Sorts);

            if (!request.SkipPaging)
            {
                domainQuery = domainQuery.Skip(request.Skip);

                if (request.Take > 0)
                {
                    domainQuery = domainQuery.Take(request.Take);
                }
            }

            return(domainQuery);
        }
Beispiel #2
0
        public static ListResult <TDomain> ApplyTableRequest <TEntity, TDomain, TKey>(this IQueryable <TEntity> query, ListRequest request, params SortOrder[] sortOrders)
            where TEntity : IEntity <TKey>
            where TDomain : IDomainBase <TKey>
        {
            var totalCount = query.Count();
            var filtered   = totalCount;

            var domainQuery = query.ProjectTo <TDomain>();

            Defensive.AssertNotNull(domainQuery);

            if (request.Filters.Any())
            {
                domainQuery = domainQuery.Where(FilterExpressionCreator.CreateFilterExpression <TEntity, TDomain>(request.Filters));
                filtered    = domainQuery.Count();
            }

            domainQuery = Sort <TDomain, TKey>(domainQuery, sortOrders, request.Sorts);

            if (!request.SkipPaging)
            {
                domainQuery = domainQuery.Skip(request.Skip);

                if (request.Take > 0)
                {
                    domainQuery = domainQuery.Take(request.Take);
                }
            }

            List <TDomain> list = domainQuery.ToList();

            var config      = Mapper.Configuration.FindTypeMapFor <TEntity, TDomain>();
            var hasAfterMap = config != null && config.AfterMapActions.Any();

            if (hasAfterMap)
            {
                //second pass TDomain => TDomain to apply AfterMap
                list = list.Select(x => Mapper.Map <TDomain>(x)).ToList();
            }

            return(new ListResult <TDomain>(list, filtered, totalCount));
        }