BuildPredicate比较两个字段

问题描述:

我想映射两个字段之间的比较,以前我只做过Expression.Constant比较的字段。BuildPredicate比较两个字段

private static Expression<Func<TDomainModel, bool>> BuildPredicate<TDomainModel>(string leftPropName, string rightPropName, TypeMap map) 
    { 
     PropertyMap leftPropMap = map.GetPropertyMaps().FirstOrDefault(pro => pro.DestinationProperty.Name == leftPropName); 
     Expression leftParam = leftPropMap.CustomExpression.Body; 

     PropertyMap rightPropMap = map.GetPropertyMaps().FirstOrDefault(pro => pro.DestinationProperty.Name == rightPropName); 
     Expression rightParam = rightPropMap.CustomExpression.Body; 

     Expression operatorBody = Expression.GreaterThanOrEqual(leftParam, rightParam); 

     return Expression.Lambda<Func<TDomainModel, bool>>(operatorBody, leftPropMap.CustomExpression.Parameters[0]); 
    } 

不过,我总是得到一个例外......

The parameter 's' was not bound in the specified LINQ to Entities query expression.

这两个属性都在同一个实体,甚至使用“S”在他们的映射。不知道如何解决这个问题。我试着将CustomExpression.Parameters这两个值放入返回的Lambda中,但它抱怨过多的重载。

感谢您的任何帮助。

您需要使用与左表达式相同的参数重写正确的表达式。现在他们不一样了。

我曾经这样做,创建一个Expression.Invoke node to the right side,然后扩展调用ExpressionVisitor