Example #1
0
        //public List<PropertyFilterConfig> Unpack(object filterObject, PagedRequest request)
        //{
        //    var newPropertyFilterConfigs = new List<PropertyFilterConfig>();

        //    var filterValues = filterObject.GetObjectPropertiesWithValue();

        //    filterValues.Where(fv => fv.GetType().Name == typeof(RangeFilter<>).Name).ToList().ForEach(fv =>
        //    {
        //        newPropertyFilterConfigs.AddRange(UnpackRangeFilter(fv, request));
        //        else if (filterValue.GetType() is IReFilterRequest)
        //        {

        //        }
        //    });

        //    return newPropertyFilterConfigs;
        //}

        //public List<PropertyFilterConfig> UnpackRangeFilter(object filterValue, PagedRequest request)
        //{
        //    if (filterValue.GetType().Name == typeof(RangeFilter<>).Name)
        //    {
        //        var newPropertyFilterConfigs = new List<PropertyFilterConfig>();
        //        var selectedPfc = request.PropertyFilterConfigs?.FirstOrDefault(pfc => pfc.PropertyName == fv);

        //        var filterValueValues = filterValue.GetObjectPropertiesWithValue();
        //        filterValueValues.TryGetValue("Start", out object lowValue);
        //        filterValueValues.TryGetValue("End", out object highValue);

        //        if (selectedPfc.OperatorComparer is OperatorComparer.BetweenExclusive)
        //        {
        //            if (lowValue != null)
        //            {
        //                newPropertyFilterConfigs.Add(new PropertyFilterConfig
        //                {
        //                    OperatorComparer = OperatorComparer.GreaterThan,
        //                    PropertyName = selectedPfc.PropertyName,
        //                    Value = lowValue
        //                });
        //            }

        //            if (highValue != null)
        //            {
        //                newPropertyFilterConfigs.Add(new PropertyFilterConfig
        //                {
        //                    OperatorComparer = OperatorComparer.LessThan,
        //                    PropertyName = selectedPfc.PropertyName,
        //                    Value = highValue
        //                });
        //            }
        //        }

        //        if (selectedPfc.OperatorComparer is OperatorComparer.BetweenInclusive)
        //        {
        //            if (lowValue != null)
        //            {
        //                newPropertyFilterConfigs.Add(new PropertyFilterConfig
        //                {
        //                    OperatorComparer = OperatorComparer.GreaterThanOrEqual,
        //                    PropertyName = selectedPfc.PropertyName,
        //                    Value = lowValue
        //                });
        //            }

        //            if (highValue != null)
        //            {
        //                newPropertyFilterConfigs.Add(new PropertyFilterConfig
        //                {
        //                    OperatorComparer = OperatorComparer.LessThanOrEqual,
        //                    PropertyName = selectedPfc.PropertyName,
        //                    Value = highValue
        //                });
        //            }
        //        }

        //        if (selectedPfc.OperatorComparer is OperatorComparer.BetweenHigherInclusive)
        //        {
        //            if (lowValue != null)
        //            {
        //                newPropertyFilterConfigs.Add(new PropertyFilterConfig
        //                {
        //                    OperatorComparer = OperatorComparer.GreaterThan,
        //                    PropertyName = selectedPfc.PropertyName,
        //                    Value = lowValue
        //                });
        //            }

        //            if (highValue != null)
        //            {
        //                newPropertyFilterConfigs.Add(new PropertyFilterConfig
        //                {
        //                    OperatorComparer = OperatorComparer.LessThanOrEqual,
        //                    PropertyName = selectedPfc.PropertyName,
        //                    Value = highValue
        //                });
        //            }
        //        }

        //        if (selectedPfc.OperatorComparer is OperatorComparer.BetweenLowerInclusive)
        //        {
        //            if (lowValue != null)
        //            {
        //                newPropertyFilterConfigs.Add(new PropertyFilterConfig
        //                {
        //                    OperatorComparer = OperatorComparer.GreaterThanOrEqual,
        //                    PropertyName = selectedPfc.PropertyName,
        //                    Value = lowValue
        //                });
        //            }

        //            if (highValue != null)
        //            {
        //                newPropertyFilterConfigs.Add(new PropertyFilterConfig
        //                {
        //                    OperatorComparer = OperatorComparer.LessThan,
        //                    PropertyName = selectedPfc.PropertyName,
        //                    Value = highValue
        //                });
        //            }
        //        }
        //    }
        //}

        #endregion Filtering

        #region SearchQueries

        public IQueryable <T> SearchObject <T>(IQueryable <T> query, BasePagedRequest request) where T : class, new()
        {
            var objectType = query.ElementType;

            var predicate = PredicateBuilder.New(query);

            List <PropertyInfo> searchableProperties;

            if (!string.IsNullOrEmpty(request.SearchQuery))
            {
                searchableProperties = objectType.GetSearchableProperties();

                if (searchableProperties.Any())
                {
                    var expressionBuilder = new ReFilterExpressionBuilder.ReFilterExpressionBuilder();
                    foreach (var property in searchableProperties)
                    {
                        var propertyFilterConfig = expressionBuilder.BuildSearchPropertyFilterConfig(property, request.SearchQuery);
                        var searchExpressions    = expressionBuilder.BuildPredicate <T>(propertyFilterConfig);

                        searchExpressions.ForEach(searchExpression => predicate.Or(searchExpression));
                    }
                }

                return(query.Where(predicate));
            }

            return(query);
        }