Linq to objects 式はオブジェクトを返します。オブジェクトは、列挙されるとシーケンスから要素を生成します。通常、遅延 LINQ-to-Object メソッドはパイプラインとして機能するため、シーケンスの各要素は、次の要素が処理される前に処理パイプラインを通過します。
a) しかし、Linq-to-Objects クエリが Linq-to-Entities クエリの結果に対して動作する場合 foreach
、反復しようとするとsearch
、次の要素が処理される前に、各要素が処理シーケンス全体を再び通過します (つまり、最初の要素です)。 DB から取得されたシーケンスから、Enumerable.Where
次に によって処理され、その後にEnumerable.SelectMany
のみ DB から次の要素が取得されます)、または DB から一度に取得された要素のセット全体です (foreach
シーケンスから最初の要素を読み取ろうとするとき)。 、そして、これらの要素が Linq-to-Objects 演算子の処理パイプラインを通過し始めるのはその後ですか?
var search = context.Contacts.AsEnumerable().
Where(s => s.ContactID > 10).SelectMany(s => s.Address);
ありがとうございました