public Func <TEntity, bool> GenerateExpression <T>( Expression <Func <TEntity, T> > fieldExpression, T value, Operator filterOperator, bool caseSensitive = true) { BuiltExpression expression = BuildExpression(fieldExpression, value, filterOperator, caseSensitive); var result = Expression.Lambda <Func <TEntity, bool> >(expression.Condition, expression.Parameter); return(result.Compile()); }
private Expression <Func <TEntity, bool> > GetResultExpression(IExpressionCondition <TEntity>[] filterConditions, ParameterExpression parameter, Expression <Func <TEntity, bool> > resultExpression) { var visitor = new ParameterVisitor(parameter); foreach (IExpressionCondition <TEntity> condition in filterConditions) { BuiltExpression expression = BuildExpression(condition.Field, condition.Value, condition.Operator, condition.CaseSensitive); visitor.AddParamToReplace(expression.Parameter); if (resultExpression == null) { resultExpression = Expression.Lambda <Func <TEntity, bool> >(visitor.Visit(expression.Condition), parameter); continue; } var exp = Expression.And(resultExpression.Body, visitor.Visit(expression.Condition)); resultExpression = Expression.Lambda <Func <TEntity, bool> >(exp, parameter); } return(resultExpression); }