Exemplo n.º 1
0
        /// <summary>
        /// A shortcut methods to add a filter.
        /// </summary>
        /// <param name="filterColumnName"></param>
        /// <param name="filterOperator"></param>
        /// <param name="filterValue"></param>
        /// <returns></returns>
        public QueryModifiers AddFilter(string filterColumnName, DynamicFilterOperator filterOperator, object filterValue)
        {
            if (this.Filters == null)
            {
                this.Filters = new List <FilterInfo>();
            }

            this.Filters.Add(new FilterInfo {
                FilterColumnName = filterColumnName, FilterOperator = filterOperator, FilterValue = filterValue
            });

            return(this);
        }
Exemplo n.º 2
0
        public static ISelect <T1> Where <T1>(this ISelect <T1> select, string field, DynamicFilterOperator filterOperator, object value)
        {
            var filter = new DynamicFilterInfo {
                Field = field, Operator = filterOperator, Value = value
            };
            Expression <Func <T1, bool> > exp = GetWhereExpression(select, filter);

            return(select.Where(exp));
        }
Exemplo n.º 3
0
        // ReSharper disable PossiblyMistakenUseOfParamsMethod

        /// <summary>
        /// Creates predicate expression that can be used in IQueryable[TEntity].Where(entity => entity.PropertyName FilterOperation FilterValue).
        /// Got most from
        /// http://stackoverflow.com/questions/8315819/expression-lambda-and-query-generation-at-runtime-simplest-where-example
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="propertyName">Entity property name</param>
        /// <param name="dynamicFilterOperator">Filter operator, like Equal, StartsWith, Contains, LessThan, etc.</param>
        /// <param name="filterValue">Filter value</param>
        /// <returns></returns>
        public static Expression <Func <TEntity, bool> > GetFilterPredicate <TEntity>(string propertyName, DynamicFilterOperator dynamicFilterOperator, object filterValue)
        {
            var entityExp          = Expression.Parameter(typeof(TEntity), "entity");
            var propertyExpression = Expression.Property(entityExp, propertyName);

            Expression rvalue         = Expression.Constant(filterValue);
            Expression rvalueString   = Expression.Constant(filterValue as string);
            Expression boolExpression = null;

            switch (dynamicFilterOperator)
            {
            case DynamicFilterOperator.Equal:
                boolExpression = Expression.Equal(propertyExpression, rvalue);
                break;

            case DynamicFilterOperator.NotEqual:
                boolExpression = Expression.NotEqual(propertyExpression, rvalue);
                break;

            case DynamicFilterOperator.GreaterThan:
                boolExpression = Expression.GreaterThan(propertyExpression, rvalue);
                break;

            case DynamicFilterOperator.GreaterThanOrEqual:
                boolExpression = Expression.GreaterThanOrEqual(propertyExpression, rvalue);
                break;

            case DynamicFilterOperator.LessThan:
                boolExpression = Expression.LessThan(propertyExpression, rvalue);
                break;

            case DynamicFilterOperator.LessThanOrEqual:
                boolExpression = Expression.LessThanOrEqual(propertyExpression, rvalue);
                break;

            case DynamicFilterOperator.StringStartsWith:
                boolExpression = Expression.Call(propertyExpression, stringStartsWithMethod, rvalueString);
                break;

            case DynamicFilterOperator.StringContains:
                boolExpression = Expression.Call(propertyExpression, stringContainsMethod, rvalueString);
                break;
            }

            if (boolExpression == null)
            {
                throw new InvalidOperationException();
            }

            Expression <Func <TEntity, bool> > exp = Expression.Lambda <Func <TEntity, bool> >(boolExpression, entityExp);

            return(exp);
        }