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; }
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()); }
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()); }
public async Task <Product[]> GetAsync( IPagingSpecification <Product> specification, CancellationToken cancellationToken = default) { return(await _specificationEvaluator .ApplySpecification(_context.Set <Product>(), specification) .ToArrayAsync(cancellationToken)); }
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); }
public BaseQuerySpecification( Expression <Func <TEntity, bool> > whereExpression, IIncludeSpecification <TEntity> includeSpecification, ISortOrderSpecification <TEntity> sortOrderSpecification, IPagingSpecification pagingSpecification) { WhereExpression = whereExpression; IncludeSpecification = includeSpecification; SortOrderSpecification = sortOrderSpecification; PagingSpecification = pagingSpecification; }
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)); }
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)); }
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)); }
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()); }
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); }