Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }