public static IQueryable <TQuery> FilterMutatorPager <TQuery, TSearch>( this IQueryable <TQuery> collection, SearchFieldMutators <TQuery, TSearch> searchRules, TSearch modelSearch) where TSearch : IFilterMutatorPager { return(searchRules.Aggregate(collection, (current, mutator) => mutator.Apply(current, modelSearch)).Skip(modelSearch.ItemsToSkip).Take(modelSearch.ItemsPerPage)); }
public static IQueryable <TQuery> FilterMutator <TQuery, TSearch>( this IQueryable <TQuery> collection, SearchFieldMutators <TQuery, TSearch> searchRules, TSearch modelSearch) { return(searchRules.Aggregate(collection, (current, mutator) => mutator.Apply(current, modelSearch))); }
public void Test2() { var searchRules = new SearchFieldMutators <User, SearchFieldVM>(); searchRules.Add( test => !string.IsNullOrWhiteSpace(test.InputText), (query, search) => query.Where(x => x.Name.Contains(search.InputText))); searchRules.Add( test => test.MinAge > 0, (query, search) => query.Where(x => x.Age >= search.MinAge)); searchRules.Add( test => test.MaxAge > 0, (query, search) => query.Where(x => x.Age <= search.MaxAge)); SearchFieldVM modelSearch = new SearchFieldVM() { InputText = null, MinAge = 17, MaxAge = 19 }; var collection = userRepository.AsQueryable(); collection = collection.FilterMutator <User, SearchFieldVM>(searchRules, modelSearch); Assert.Equal(2, collection.Count()); }