protected virtual List <Customer> ExecuteQuery <TValue>(RuleOperator op, Expression <Func <Customer, TValue> > left, object right) { var paramExpr = Expression.Parameter(typeof(Customer), "it"); var valueExpr = ExpressionHelper.CreateValueExpression(left.Body.Type, right); // Expression.Constant(right) var expr = op.GetExpression(left.Body, valueExpr, true); var predicate = ExpressionHelper.CreateLambdaExpression(paramExpr, expr); var result = _customers.AsQueryable().Where(predicate).Cast <Customer>().ToList(); return(result); }
public override Expression GetExpression(RuleOperator op, Expression valueExpression, bool liftToNull) { // Create the Any()/All() lambda predicate (the part within parentheses) var predicate = ExpressionHelper.CreateLambdaExpression( Expression.Parameter(typeof(TPredicate), "it2"), op.GetExpression(PredicateExpression.Body, valueExpression, liftToNull)); var body = Expression.Call( typeof(Enumerable), MethodName, // .Any/All<TPredicate>() new[] { typeof(TPredicate) }, // 0 = left collection path: x.Orders.selectMany(o => o.OrderItems) // 1 = right Any/All predicate: y => y.ProductId = 1 new Expression[] { MemberExpression.Body, predicate }); return(body); }
public virtual Expression GetExpression(RuleOperator op, Expression valueExpression, bool liftToNull) { return(op.GetExpression(MemberExpression.Body, valueExpression, liftToNull)); }