5

文字列ベースのオーバーロードでIncludeは、関連するナビゲーションプロパティを正しい順序で指定するだけで、コレクションを含めてから1レベル下の参照を含めるように指定します。

query.Include("Level1Collection.Level2Reference");

しかし、ラムダ式を使用するオーバーロードを使用する場合、上記のクエリを指定できるステートメントIncludeも使用する必要があるのはなぜですか?Select

query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Reference)).

次の作業がうまくいかないのはなぜですか。

query.Include.(e => e.Level1Collection.Level2Reference)

ありがとうございました

4

1 に答える 1

7

コンパイラは、コンテキストがコレクションプロパティの意味をコレクションからコレクション内のオブジェクトの代用に変更したことを認識しないためです。また、コンパイラはコンテキストに基づいて変更されないため、インテリセンスも変更されません。

Include a stringステートメントをフィードすると、リフレクションを使用して含めるプロパティを知る必要があり、コンパイル時に型チェックが行われないことがわかります。基になるメソッドは、文字列内のコレクションプロパティの後にドットが表示されると、コレクション自体ではなく、コレクション内のオブジェクトのプロパティを解析して、次に参照されるプロパティ(この場合は「Level2Reference」)を取得する必要があることを認識しています。

言い換えれば、それは魔法です。:)

于 2012-04-05T20:28:07.213 に答える