我有两个表达式(可以是常量或属性表达式)leftExpr
和rightExpr
,并且想要创建一个大于结果之间的组合表达式,如下所示:
Expression.Lambda<Func<object, bool>>(x => Expression.GreaterThan(leftExpr(x),rightExpr(x))
这显然不起作用,什么是正确的方法? (我是表达树的新手)
left and rightExpr的代码:
Expression leftExpr, rightExpr;
if (left_element.All(char.IsDigit))
{
leftExpr = Expression.Constant(int.Parse(left_element));
}
else
{
leftExpr = Expression.PropertyOrField(Expression.Parameter(t), left_element);
}
if (right_element.All(char.IsDigit))
{
rightExpr = Expression.Constant(int.Parse(right_element));
}
else
{
rightExpr = Expression.PropertyOrField(Expression.Parameter(t), right_element);
}
答案 0 :(得分:0)
你使用它有点不对:首先,你应该使用一个 ParameterExpression,并修复你Expression.Lambda
。如果修复此问题,它看起来像
Expression leftExpr, rightExpr;
var x = Expression.Parameter(t);
if (left_element.All(char.IsDigit))
{
leftExpr = Expression.Constant(int.Parse(left_element));
}
else
{
leftExpr = Expression.PropertyOrField(x, left_element);
}
if (right_element.All(char.IsDigit))
{
rightExpr = Expression.Constant(int.Parse(right_element));
}
else
{
rightExpr = Expression.PropertyOrField(x, right_element);
}
和
Expression.Lambda<Func<object, bool>>(Expression.GreaterThan(leftExpr,rightExpr),x);