public static IQueryable <T> GetQuery(IQueryable <T> queryToRun, ISpecificationBase <T> spec) { var querySpecification = queryToRun; if (spec.Criterion != null) { querySpecification = querySpecification.Where(spec.Criterion); } if (spec.OptionalCriterion.Count > 0) { foreach (var item in spec.OptionalCriterion) { querySpecification = querySpecification.Where(item); } } querySpecification = spec.Include.Aggregate(querySpecification, (current, inclusion) => current.Include(inclusion)); querySpecification = spec.IncludeAsString.Aggregate(querySpecification, (current, inclusion) => current.Include(inclusion)); if (spec.OrderBy != null) { querySpecification = querySpecification.OrderBy(spec.OrderBy); } else if (spec.OrderByDescending != null) { querySpecification = querySpecification.OrderByDescending(spec.OrderByDescending); } if (spec.IsPageEnable) { querySpecification = querySpecification.Skip(spec.Start).Take(spec.Count); } return(querySpecification); }
private IQueryable <T> ApplySpecificacion(ISpecificationBase <T> spec) { return(EvaluatorBase <T> .GetQuery(_dbContext.Set <T>().AsNoTracking(), spec)); }
public async Task <IReadOnlyList <T> > GetListAsync(ISpecificationBase <T> specification) => await ApplySpecificacion(specification).ToListAsync();
public async Task <T> GetItemByIdAsync(ISpecificationBase <T> specification) => await ApplySpecificacion(specification).FirstOrDefaultAsync();