1

以前はフィールド間の比較のみを行っていましたが、2 つのフィールド間の比較をマップしようとしています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」を使用しています。これを修正する方法がわかりません。返された Lambdaに両方の値を入れようとしましCustomExpression.Parametersたが、オーバーロードが多すぎると不平を言っています。

助けてくれてありがとう。

4

1 に答える 1

1

左の式と同じパラメーターを使用して、右の式を書き直す必要があります。今は違います。

以前は、右側に Expression.Invoke ノードを作成してから、 ExpressionVisitorで呼び出しを展開していました。

于 2013-03-18T16:50:17.010 に答える