2016-12-09 7 views
0

Table1参照Table2Table2参照Table3を参照してください。EF:Includeを使用するときに外部テーブルの外部テーブルが含まれていますか?

問合せ:

x.Table1.Include(x=> x.Table2) 
    .Where(x=> x.something == 1).Select(x=> new{ 
    T2Model = x.Table2.Select(y=> new{ 
      T3Val = y.Table3.val 
    }) 
}).ToList() 

Include(x=> x.Table2)Table3からvalは問題なくロードされることを保証するだろうか?あなたがIncludeコールを削除する場合

+0

ない限り、遅延読み込みがオンになっているとして、あなたが持っているのすべての単一の外部エンティティを含めることができますが、selectのvarは正しくロードされます –

答えて

2

あなたのクエリは動作するはずです:

x.Table1 
    .Where(x=> x.something == 1).Select(x=> new{ 
    T2Model = x.Table2.Select(y=> new{ 
      T3Val = y.Table3.val 
    }) 
}).ToList(); 

あなたの投影は、あなたのLINQのエンティティへの問い合わせが後にSQLに変換されようとしているので、Table3からvalがロードされることを保証するものです、 Selectで何をしているのかによって、Linqプロバイダはその投影を行うために2つの内部結合を行う必要があることを控除します。

あなたは、関連するプロパティを使用して突出しないと、あなたがそれらを(遅延ロードが無効になった)をロードしたい場合は、Include拡張メソッドを使用します。

x.Table1.Include(x=> x.Table2.Select(e=>e.Table3)); 
関連する問題