private string CacheKey(Expression <Func <T, bool> > predicate = null, PagedSpecification <T> paging = null) { var identity = new StringBuilder(); if (predicate != null) { Expression expression = predicate; // locally evaluate as much of the query as possible expression = Evaluator.PartialEval(expression); // support local collections expression = LocalCollectionExpander.Rewrite(expression); identity.Append(expression); } else { identity.Append("All"); } if (paging?.PageNumber > 0) { identity.AppendFormat("|page:{0}", paging.PageNumber); } if (paging?.PageSize > 0) { identity.AppendFormat("|size:{0}", paging.PageSize); } if (paging?.Sorting != null) { identity.AppendFormat("|orderby:{0}", paging.Sorting); } var hash = ComputeHash(identity.ToString()); return(string.Concat(typeof(T).FullName, "/", GetGeneration(), "/", hash)); }
public List <T> GetPage(int page, int resultsPerPage, string orderBy, Func <string, Expression <Func <T, object> > > map, bool desc = false, ISpecification <T> spec = null) { PagedSpecification <T> spec1 = new PagedSpecification <T>(map); spec1.ApplyOrderBy(orderBy, desc); spec1.Apply(page * resultsPerPage, resultsPerPage); if (spec == null) { return(base.GetPage(page, resultsPerPage, new List <ISort>() { SpecificationEvaluator <T, TKey> .GetSort(spec1) })); } else { return(base.GetPage(page, resultsPerPage, new List <ISort>() { SpecificationEvaluator <T, TKey> .GetSort(spec1) }, SpecificationEvaluator <T, TKey> .GetQuery(spec))); } }
public IQueryable <T> Build(IRepository repository) { IQueryable <T> query; if (_include != null) { var loadService = repository.As <ILoadService <T> >().Include(_include); query = loadService.All(); } else { query = repository.All <T>(); } if (_query != null && _pageNumber != 0 && _pageSize != 0) { var paging = new PagedSpecification <T>((Specification <T>)_query).Page(_pageNumber, _pageSize); query = paging.Apply(query); } else if (_query != null) { query = _query.Apply(query); } else if (_pageNumber != 0 && _pageSize != 0) { var paging = new PagedSpecification <T>(Specification <T> .AlwaysTrue).Page(_pageNumber, _pageSize); query = paging.Apply(query); } if (_orderBy != null) { query = _orderBy.Apply(query); } return(query); }