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。