問題タブ [expressionvisitor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - クロージャーのために実際の値が DisplayClass にラップされたときに ConstantExpression.Value を取得する
以下は、私の問題の簡単なデモ コードです。
TestParamメソッドはVisitConstant、2 つの異なるパスで呼び出されます。
1. TestParam -> Search->VisitConstant
この実行パスSearchでは、メソッドに渡される定数式 (1L) は実定数値です。ここでは、すべて問題ありません。 assert は期待どおりに成功します。VisitConstant最初のパスnode.Value.GetType()isInt64およびその.Valueisを介して呼び出された場合1L。
2. TestParam -> GetStudent-> Search->VisitConstant
この実行パス定数式 (id: 1L) では、引数として取り、クロージャー内のメソッドにGetStudent渡します。Search
問題
問題は 2 番目の実行パスにあります。がVisitConstant2 番目のパスを介して呼び出されnode.Value.GetType()、このクラスに(メソッドの引数と同じ)MyProject.Tests.ExpressionTests+<>c__DisplayClass0という名前の public フィールドがあり、値が.idGetStudent1L
質問
id2 番目のパスで値を取得するにはどうすればよいですか? DisplayClassクロージャ、aとは何か、コンパイル時に作成される理由などについて知っています。フィールド値を取得することにのみ関心があります。私が考えることができることの1つは、反射によるものです。以下のようなものですが、きれいに見えません。
ボーナス問題
値を取得するためのコードで遊んでいるときに、以下のようにメソッドidを変更しましVisitConstantたが (これでは問題は解決しません)、「'object' には 'id' の定義が含まれていません」という例外が発生します。

ボーナス質問
ダイナミクスは実行時に解決さDisplayClassれ、コンパイル時に作成されるため、なぜそのフィールドにアクセスできないのdynamicですか? 以下のコードは機能しますが、コードも機能することを期待していました。
c# - Queryable c# join に参加する場合
クエリ可能な結合への参加を見つける方法を探しています...
基本的に、クエリ可能なステートメントの結合操作でモデル クラス X が使用されているかどうかを確認したい。David Fowl のQueryInterceptorを使用して、式ビジターを IQueryable に配置できます。次に、タイプがクラス X のパラメータの Lambda 式 (結合は一般的に表現されているように見えます) をチェックします。ビジターは、ヒットのフラグを切り替えることができます。
他の方法?繰り返しますが、クラス X が結合に関与しているかどうかだけに関心があります。
c# - C# mongodb ドライバー解析用の既存の式から親オブジェクトに式ツリーを作成する
私はこのようなクラスを持っています:
そして、次のような他のジェネリック クラスがあります。
たとえば、次のような式があります。
この式を次のように変換するにはどうすればよいですか:
編集 :
私の質問では開発が不十分だったと思います。次のような方法が必要です。
編集 :
C# mongodb ドライバーによって解析される新しいツリー式を作成する必要があります。式ツリーで他の Compile メソッドを呼び出すことができません。
ExpressionVisitorを使用する必要があると思いますが、方法がわかりません...
c# - 式ツリーの最も内側の例外がスローされないのはなぜですか?
ExpressionVisitor(オプションで)NullReferenceException最初の値にスローする式を生成するカスタムを作成しようとしていnullます。式のDebugViewは私には問題ないように見えますが、期待どおりに機能しません(私によると)。最初に投げると思った
テスト変数はありますがnull、代わりにこれがスローされるためです
ステートメントを逆方向に実行する理由がわかりません。If最初に最も内側を実行するべきではありませんか?
デバッグビュー:
私の完全なテストコード:
c# - ExpressionVisitor には VisitMethodCall が呼び出されていません
LINQ プロバイダーを作成するためのMSDNのサンプル シリーズに従っていますが、壁にぶつかりました。
ExpressionVisitor次のテストを作成すると、以下のソースコードのサブクラスがVisitMethodCall呼び出されることを期待しています。
代わりに、VisitConstantメソッドが呼び出されます。これは、がインスタンス化されると、そのプロパティに a がProvider割り当てられるためだと思います。私が何か間違ったことをしているのか、それとも MSDN のガイドに問題があり、メソッド呼び出しを含む式を取得できないのかはわかりません。ExpressionConstantExpressionWhere
IQueryable<T>これは、とのIQueryProvider実装用に私が持っているソース コードです。
編集
IQueryableからのを実際に保存するように単体テストを更新しましたが.Where、まだVisitMethodCall呼び出しが表示されません。