私は式ツリーを解析する必要があるプロジェクトに取り組んでいます。私は大部分の作業を行いましたが、少し問題がありました。式ツリー解析、変数は定数として終了する
私は式の木の上にStackOverflowの上の他の質問を見てきたが、私の質問への答えを見つけるように見えるので、ここでは行くことができません。
私の問題は、定数と変数の違い(または不足)です。私は例から始めましょう:
user => user.Email == email
これは明らかに一定ではなく変数ではないが、これはどこかで式ツリー内のConstantExpressionされて終わります。あなたは式自体を見てみた場合、それは少し奇妙に見える:
Expression = {value(stORM.Web.Security.User+<>c__DisplayClassa)}
我々は別の例取る場合:ここで私はENUM(TaskStatus)を使用してい
task => task.Status != TaskStatus.Done && t.Status != TaskStatus.Failed
を。ツリー解析で、私は両方のケースでConstantExpressionで終わるように見える、と私は本当にそれらを区別できるようにする必要があること
だから私の問題があります。これらは単なる例なので、私が求めているのは、これらの2つのタイプの式を互いに伝える一般的な方法です。したがって、私は解析で2つの異なる方法で処理できます。
EDIT:大丈夫、例がわからない場合がありますので、もう一度お試しください。最初の例:
ユーザーユーザー= db.Search <ユーザー>(U => u.Email ==メール)
私は指定されたメールアドレスでユーザーを探しています。私はこれをストアドプロシージャに解析していますが、それは私が推測する点のほかにあります。
第二の例:
のIList <タスク>タスク= db.Search(!!T => t.Status = TaskStatus.Done & & t.Status = TaskStatus.Failed);
ここでは、DoneとFailedとは異なるステータスのすべてのタスクを検索しようとしています。 これもまた、ストアドプロシージャに解析されています。最初の例では、私のコードは、ストアドプロシージャが電子メール変数の値である入力パラメータを必要としているかどうかを判断する必要があります。 2番目の例では入力パラメータは必要ありません。DoneとFailedと異なるステータスのタスクを選択するためにSQLを作成するだけです。
ありがとうございました
私の質問では十分明確ではないかもしれませんが、電子メールは実際にはユーザーオブジェクトのプロパティです。 –
@SteenT - 表現ツリーはどのように見えますか? 'email'は暗黙のうちに' this.email'であるので、静かに 'this'をキャプチャするのと同じことかもしれません。だから、私は*メンバーが "期待している"かもしれません(私が何を意味するか分かります) –
@SteenT - ああ、私の答えでは私は右の 'email'について話していました手の側。上記のコメントは、左側の 'user.Email'を説明する必要があります。 –