Exemplo n.º 1
0
        public static IQueryable <T> Filter <T>(this IQueryable <T> query, StoreParams storeParams)
        {
            if (storeParams == null /*|| (storeParams.FilterParams == null || !storeParams.FilterParams.Any() )*/)
            {
                return(query);
            }

            var properties = typeof(T).GetProperties();

            storeParams
            .DetermineFilterOperators(properties)
            .Where(x => properties.Any(y => y.Name.ToLower() == x.PropertyName.ToLower()))
            .ForEach(x =>
            {
                var field = properties.First(y => y.Name.ToLower() == x.PropertyName.ToLower());

                var filterExpression = FilterExpressionBuilder.GetFilterExpression <T>(field, x.Value, x.Operator, x.SubProperties);

                if (filterExpression != null)
                {
                    query = query.Where(filterExpression);
                }
            });

            return(query);
        }