public async Task <ICollection <TEntity> > ListAsync <TEntity>(LinqSpecification <TEntity> specification) where TEntity : class { if (specification == null) { throw new ArgumentNullException(nameof(specification)); } return(await GetQueryable(specification).ToListAsync()); }
public async Task <TEntity> SingleAsync <TEntity>(LinqSpecification <TEntity> specification) where TEntity : class { if (specification == null) { throw new ArgumentNullException(nameof(specification)); } return(await GetQueryable(specification).SingleOrDefaultAsync()); }
private void AndSpecification(LinqSpecification <Ticket> filterSpec) { if (_specification == null) { _specification = filterSpec; } else { _specification &= filterSpec; } }
protected virtual IQueryable <TEntity> GetQueryable <TEntity>(LinqSpecification <TEntity> specification) where TEntity : class { var setQueryable = _dataContext.Set <TEntity>().AsQueryable(); if (specification.IsTracked) { setQueryable.AsNoTracking(); } setQueryable = specification.ApplyFilters(setQueryable); setQueryable = specification.ApplyModifiers(setQueryable); return(setQueryable); }
public async Task <TResult> QueryAsync <TEntity, TResult>(LinqSpecification <TEntity> specification, Func <IQueryable <TEntity>, Task <TResult> > resolver) where TEntity : class { if (specification == null) { throw new ArgumentNullException(nameof(specification)); } if (resolver == null) { throw new ArgumentNullException(nameof(resolver)); } var query = GetQueryable(specification); return(await resolver(query)); }
public async Task <PagedCollection <TEntity> > PagedListAsync <TEntity>(int page, int pageSize, LinqSpecification <TEntity> specification, Expression <Func <TEntity, dynamic> > primaryKeyExpression = null) where TEntity : class { if (specification == null) { throw new ArgumentNullException(nameof(specification)); } if (page < 0) { throw new ArgumentOutOfRangeException(nameof(page)); } if (pageSize <= 0) { throw new ArgumentOutOfRangeException(nameof(pageSize)); } Task <int> totalRecordsResolver(IQueryable <TEntity> query) => primaryKeyExpression == null?query.CountAsync() : query.Select(primaryKeyExpression).CountAsync(); Func <IQueryable <TEntity>, IQueryable <TEntity> > paginationResolverFunction() => a => a.Skip(page * pageSize).Take(pageSize); var totalRecords = await QueryAsync(specification, totalRecordsResolver); var pagedEntities = await ListAsync(specification.AddQuery(paginationResolverFunction())); return(new PagedCollection <TEntity>(page, pageSize, totalRecords, pagedEntities)); }
protected AbstractTicketsLookup(LinqSpecification <Ticket> defaultSpecifcation) { _specification = defaultSpecifcation; }
public LinqSpecificationFixture() { _specfication = new LinqSpecification <string>(s => s.Length == 1); }