1

我正在尝试映射两个字段之间的比较,以前我只进行字段Expression.Constant比较。

  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 中,但是它抱怨过多的重载。

谢谢你的帮助。

4

1 回答 1

1

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

我曾经这样做是在右侧创建一个 Expression.Invoke 节点,然后使用ExpressionVisitor扩展调用。

于 2013-03-18T16:50:17.010 回答