public T Find(IDataQuerySpecification <T> spec) { var queryableResultWithIncludes = spec.Includes .Aggregate(ctx.Set <T>().AsQueryable(), (current, include) => current.Include(include)); var secondaryResult = spec.IncludeStrings .Aggregate(queryableResultWithIncludes, (current, include) => current.Include(include)); return(secondaryResult .FirstOrDefault(spec.Criteria)); }
public IEnumerable <T> Filter(IDataQuerySpecification <T> spec) { var queryableResultWithIncludes = spec.Includes .Aggregate(ctx.Set <T>().AsQueryable(), (current, include) => current.Include(include)); var secondaryResult = spec.IncludeStrings .Aggregate(queryableResultWithIncludes, (current, include) => current.Include(include)); return(secondaryResult .Where(spec.Criteria) .AsEnumerable()); }