private static IQueryable ApplyFilteringCriteria(IQueryable data, FilteringParams filteringParams) { var propertyPredicateValues = new List <object>(); string propertyPredicate = BuildPredicate(filteringParams.FilterItems, PredicateConditionEnum.And, ref propertyPredicateValues); string globalSearchPredicate = BuildPredicate(filteringParams.GlobalSearchItems, PredicateConditionEnum.Or, ref propertyPredicateValues); var predicate = propertyPredicate; if (!String.IsNullOrEmpty(globalSearchPredicate)) { if (!String.IsNullOrEmpty(propertyPredicate)) { predicate = String.Format("{0} and ({1})", propertyPredicate, globalSearchPredicate); } else { predicate = globalSearchPredicate; } } if (!String.IsNullOrEmpty(predicate)) { return(data.Where(predicate, propertyPredicateValues.ToArray())); } return(data); }
private static IQueryable ApplySortingCriteria(IQueryable data, FilteringParams filteringParams) { string sortString = ""; foreach (var sorting in filteringParams.SortingItems) { if (!String.IsNullOrEmpty(sortString)) { sortString += ", "; } sortString += sorting.PropertyName + " " + sorting.Direction; } if (!String.IsNullOrEmpty(sortString)) { return(data.OrderBy(sortString)); } return(data); }
public static FilteredResult <T> Execute <T>(IQueryable <T> data, FilteringParams filteringParams) { var result = new FilteredResult <T>(); result.TotalRecords = data.Count(); data = ApplyFilteringCriteria(data, filteringParams).Cast <T>(); data = ApplySortingCriteria(data, filteringParams).Cast <T>(); result.TotalFilteredRecords = data.Count(); //pagination if (filteringParams.Take > 0) { data = data.Skip(filteringParams.Skip).Take(filteringParams.Take); } result.Items = data.Cast <T>().ToList(); return(result); }