Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 private IQueryable <T> ApplySpecificacion(ISpecificationBase <T> spec)
 {
     return(EvaluatorBase <T> .GetQuery(_dbContext.Set <T>().AsNoTracking(), spec));
 }
Esempio n. 3
0
 public async Task <IReadOnlyList <T> > GetListAsync(ISpecificationBase <T> specification) => await ApplySpecificacion(specification).ToListAsync();
Esempio n. 4
0
 public async Task <T> GetItemByIdAsync(ISpecificationBase <T> specification) => await ApplySpecificacion(specification).FirstOrDefaultAsync();