コード例 #1
0
 public BaseSpecification(Expression <Func <TEntity, bool> > criteria, ISortOrderSpecification <TEntity> sortOrder, IPagingSpecification paging)
 {
     Criteria            = criteria;
     Includes            = new List <Expression <Func <TEntity, object> > >();
     SortOrder           = sortOrder;
     PagingSpecification = paging;
 }
コード例 #2
0
        public IQueryable <Order> Paging(IPagingSpecification <Order> specification)
        {
            var noOrder         = string.IsNullOrWhiteSpace(specification.OrderBy);
            var queryableResult = specification.Includes.Aggregate(_context.Set <Order>().AsQueryable(), (current, include) => current.Include(include));

            return(queryableResult.Where(specification.Criteria).OrderBy(noOrder ? "ModifiedTime" : specification.OrderBy, noOrder ? true : specification.Desc).Skip((specification.Page - 1) * specification.PageSize).Take(specification.PageSize).AsNoTracking());
        }
コード例 #3
0
        public IQueryable <Product> Paging(IPagingSpecification <Product> specification)
        {
            var noOrder = string.IsNullOrWhiteSpace(specification.OrderBy);

            /*
             * 这里的分页查询用到两个扩展参数
             * Ext1用来存储组织Id信息
             * Ext2存储任意字符,如果有数据信息,则改查询为权限查询(既该查询为代理商或者供应商产品分页查询)
             */


            if (!string.IsNullOrWhiteSpace(specification.Ext2))
            {
                var permissionQ = from it in _context.Set <ProductPermissionOrgan>()
                                  join ip in _context.Set <ProductPermissionItem>() on it.ProductPermissionGroupId equals ip.ProductPermissionGroupId
                                  where it.OrganizationId == specification.Ext1
                                  select ip.ProductId;

                var q = specification.Includes.Aggregate(_context.Set <Product>().AsQueryable(), (current, include) => current.Include(include));
                return(q.Where(specification.Criteria).Where(x => permissionQ.Contains(x.Id)).OrderBy(noOrder ? "ModifiedTime" : specification.OrderBy, noOrder ? true : specification.Desc).Skip((specification.Page - 1) * specification.PageSize).Take(specification.PageSize).AsNoTracking());
            }



            var queryableResult = specification.Includes.Aggregate(_context.Set <Product>().AsQueryable(), (current, include) => current.Include(include));

            return(queryableResult.Where(specification.Criteria).OrderBy(noOrder ? "ModifiedTime" : specification.OrderBy, noOrder ? true : specification.Desc).Skip((specification.Page - 1) * specification.PageSize).Take(specification.PageSize).AsNoTracking());
        }
コード例 #4
0
 public async Task <Product[]> GetAsync(
     IPagingSpecification <Product> specification,
     CancellationToken cancellationToken = default)
 {
     return(await _specificationEvaluator
            .ApplySpecification(_context.Set <Product>(), specification)
            .ToArrayAsync(cancellationToken));
 }
コード例 #5
0
        public IQueryable <TEntity> ApplyPagingSpecification <TEntity>(
            IQueryable <TEntity> inputQuery,
            IPagingSpecification <TEntity> specification)
            where TEntity : class
        {
            var query = ApplySpecification(inputQuery, specification)
                        .Skip(specification.PageIndex * specification.PageSize)
                        .Take(specification.PageSize);

            return(query);
        }
コード例 #6
0
 public BaseQuerySpecification(
     Expression <Func <TEntity, bool> > whereExpression,
     IIncludeSpecification <TEntity> includeSpecification,
     ISortOrderSpecification <TEntity> sortOrderSpecification,
     IPagingSpecification pagingSpecification)
 {
     WhereExpression        = whereExpression;
     IncludeSpecification   = includeSpecification;
     SortOrderSpecification = sortOrderSpecification;
     PagingSpecification    = pagingSpecification;
 }
コード例 #7
0
ファイル: EFRepository.cs プロジェクト: tylern88/TimeCardEMS
        public virtual IPagedResults <T> List(IPagingSpecification <T> pagingSpec)
        {
            var query = _dbContext.Set <T>();
            var total = query.Count();
            var data  = query
                        .OrderBy(pagingSpec.OrderBy)
                        .Skip(pagingSpec.Count * (pagingSpec.Page - 1))
                        .Take(pagingSpec.Count)
                        .AsEnumerable();

            return(GetPagedResults(total, pagingSpec.Count, pagingSpec.Page, data));
        }
コード例 #8
0
ファイル: EFRepository.cs プロジェクト: tylern88/TimeCardEMS
        public virtual async Task <IPagedResults <T> > ListAsync(IPagingSpecification <T> pagingSpec)
        {
            var query = _dbContext.Set <T>();
            var total = await query.CountAsync();

            var data = await query
                       .OrderBy(pagingSpec.OrderBy)
                       .Skip(pagingSpec.Count * (pagingSpec.Page - 1))
                       .Take(pagingSpec.Count)
                       .ToListAsync();

            return(GetPagedResults(total, pagingSpec.Count, pagingSpec.Page, data));
        }
コード例 #9
0
ファイル: EFRepository.cs プロジェクト: tylern88/TimeCardEMS
        public virtual IPagedResults <T> List(IPagingSpecification <T> pagingSpec, ISpecification <T> spec)
        {
            var queryableResultWithIncludes = spec.Includes
                                              .Aggregate(_dbContext.Set <T>().AsQueryable(),
                                                         (current, include) => current.Include(include));

            var secondaryResult = spec.IncludeStrings
                                  .Aggregate(queryableResultWithIncludes,
                                             (current, include) => current.Include(include));

            var query = spec.Criteria
                        .Aggregate(secondaryResult,
                                   (current, criterion) => current.Where(criterion));
            var total = query.Count();
            var data  = query
                        .OrderBy(pagingSpec.OrderBy)
                        .Skip(pagingSpec.Count * (pagingSpec.Page - 1))
                        .Take(pagingSpec.Count)
                        .AsEnumerable();

            return(GetPagedResults(total, pagingSpec.Count, pagingSpec.Page, data));
        }
コード例 #10
0
        public IQueryable <StaticMesh> Paging(IPagingSpecification <StaticMesh> specification)
        {
            var queryableResult = specification.Includes.Aggregate(_context.Set <StaticMesh>().AsQueryable(), (current, include) => current.Include(include));

            return(queryableResult.Where(specification.Criteria).OrderBy(specification.OrderBy, specification.Desc).Skip((specification.Page - 1) * specification.PageSize).Take(specification.PageSize).AsNoTracking());
        }
コード例 #11
0
        private static IQueryable <TEntity> ApplyPagingSpecification(IQueryable <TEntity> queriable, IPagingSpecification specification)
        {
            ValidatePageParams(specification.PageSize, specification.PageNo);
            var result = queriable
                         .Skip(specification.PageNo * specification.PageSize)
                         .Take(specification.PageSize);

            return(result);
        }