3

LinqExpression を SQL ステートメントに変換しようとしています。たとえば、リポジトリ基本クラスには、引数として LinqExpression を受け入れるメソッド Find があります。Find メソッド内で、次のアクションを実行するメソッドを呼び出しています。

var equality = expression as BinaryExpression;
                return equality.Left.Translate() + " = " +
                       equality.Right.Translate();

変数名だけでなく、右側の変数の値を取得するにはどうすればよいですか。現在、変数名のみを取得しています。元。Find(x => x.ID = 変数); 変数が現在 7 に設定されている場合、名前変数ではなく値 7 を取得する方法が必要です。変数に格納されている値を取得する正しい方法は何ですか?

4

2 に答える 2

1

Matt Warren の記事LINQ: Building an IQueryable Provider - Part III をご覧ください。Evaluatorインライン化できるすべての値をインライン化するクラスのコードが含まれています。あなたの場合、値 7 を含むvariablea に置き換えられます。ConstantExpression

このシリーズの残りの記事も、あなたにとって興味深いものになるかもしれません。

于 2013-07-28T10:39:56.193 に答える
0

それぞれMemberExpressionまたはConstantExpressionにキャストしてみてください。

  var memberExpression = (MemberExpression) expression.Left;
  var constantExpression = (ConstantExpression) expression.Right;

ああ、それは変数だったのを逃しました。次に、右側のオペランドはParameterException型である必要があります。ただし、その値を取得するには、次を使用できます

 Func<object> getValue = expression.Compile();
 var value = getValue();

これは遅くなる可能性があることに注意してください。

于 2013-07-28T10:15:07.213 に答える