【问题标题】:BuildPredicate comparing two fieldsBuildPredicate 比较两个字段
【发布时间】:2013-03-18 16:38:53
【问题描述】:

我正在尝试映射两个字段之间的比较,以前我只对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 中,但它抱怨过多的重载。

感谢您的帮助。

【问题讨论】:

    标签: c# lambda linq-to-entities expression automapper


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-12-03
      • 2011-10-30
      • 2023-03-05
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多