我将两个表达式与Expression.And结合起来。如何用实际值编译这个新表达式?
swashbuckle
我在尝试使用值替换参数后尝试使用这样的方法
var expr1 = Expression.Equal(Expression.Parameter(typeof(int), "param1"), Expression.Parameter(typeof(int), "param2"));
var expr2 = Expression.Equal(Expression.Parameter(typeof(int), "param3"), Expression.Parameter(typeof(int), "param4"));
var finalExpression = Expression.And(expr1, expr2);
答案 0 :(得分:2)
您需要将其编译为具有相同参数的lambda:
var lambda = Expression.Lambda<Func<int, int, int, int, bool>>(
finalExpression, param1, ...).Compile();
lambda(1, 2, 3, 4);
请注意,您需要将表达式中使用的Expression.Parameter()
个实例传递给Lambda()
。
答案 1 :(得分:1)
如果要用常量替换参数,可以使用ExpressionVisitor
替换参数,用Expression.Constant
替换参数的任何实例。然后,您可以将lambda编译为类型而不需要参数。或者,您可以构建一个涉及另一个lambda的lambda - 不是在PC上,而是Expression.Invoke
或Expression.Call
- 基本上,它就像一个子调用。