/// <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); }
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)); }
// 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); }