通过组合两个表达式创建一元GreaterThan Linq.Expression

时间:2015-08-12 13:09:06

标签: c# linq-expressions

我有两个表达式(可以是常量或属性表达式)leftExprrightExpr,并且想要创建一个大于结果之间的组合表达式,如下所示:

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

1 个答案:

答案 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);