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

Create unary GreaterThan Linq.Expression by combining two expressions

我有两个表达式(可以是常量或 属性 表达式)leftExprrightExpr,我想创建一个大于结果之间的组合表达式,像这样:

Expression.Lambda<Func<object, bool>>(x => Expression.GreaterThan(leftExpr(x),rightExpr(x))

这显然行不通,正确的做法是什么? (我是表达式树的新手)

左右表达式的代码:

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

你用的有点不对:首先你应该用一个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);