using Core.Entities; using Core.Specifications; using Microsoft.EntityFrameworkCore; namespace Infrastructure.Data { public class SpecificationEvaluator where TEntity : BaseEntity { public static IQueryable GetQuery(IQueryable inputQuery, ISpecification spec) { var query = inputQuery; if (spec.Criteria != null) { query = query.Where(spec.Criteria); } if (spec.OrderBy != null) { query = query.OrderBy(spec.OrderBy); } if (spec.OrderByDecending != null) { query = query.OrderByDescending(spec.OrderByDecending); } if (spec.IsPagingEnabled) { query = query.Skip(spec.Skip).Take(spec.Take); } query = spec.Includes.Aggregate(query, (current, include) => current.Include(include)); return query; } } }