2016-10-04 6 views
0

をエラー含める:LINQ子どもたちの価値が、私はこのクエリを持って

var allValues = from p in _pContext.Persons 
where p.Id == currentPerson.Id 
from i in p.Items //This is a list that contains "Items" 
select i; 

私はそこに含まれるすべての項目およびすべてのネストされた値を持っていると思います。このクエリを実行するときにこれらをロードするにはどうすればいいですか?私は文脈で使うことができるインクルードステートメントを知っていますが、それはどこにもつながりません。もし私がf。次の操作を行います。

var allValues = from p in _pContext.Persons.Include("Items.Properties") 
where p.Id == currentPerson.Id 
from i in p.Items //This is a list that contains "Items" 
select i; 

がそれに関連して「プロパティ」を搭載したすべての項目を取得するには、これらのプロパティは、そのリストがインスタンス化、されてロードされたが、いずれも含まれ、それdoesntのアレント。

+0

含める方法の異なるバージョンを別のクラスには存在しません。これはlamdaを受け取ります。lamdaには、関連するオブジェクトを指定します。私が知る限り、使用するには:using System.Data.Entity;を使用する必要があります。 – Max

+0

あなたは人とアイテムの1対1の関係を持っていますか? – octavioccl

+0

申し訳ありません私はラムダ式を使用することができません。なぜなら私はEFでMySQLを使用しています。 – Ravior

答えて

2

Includeには奇妙な癖がたくさんあります。その1つは、クエリ形状が適用後に変更された場合は、Includeが無視されることです。これはあなたの場合に起こります。

from p in _pContext.Persons.Include("Items.Properties") 
select p 

パス"Items.Properties"が最終結果にエンティティのオフトラバース可能であるので、これは次のとおりです:Personクエリは次のようになります場合Inlude作品。

しかし、今あなたが返されたエンティティを変更することで、クエリの形状を変更...

from p in _pContext.Persons.Include("Items.Properties") 
from i in p.Items 
select i 

...とインクルードパスが有効ではありません。 (Itemから外れていない)。

Includeの場合、サムの単純なルールがあります。クエリの最後に適用します。そうすることで、自動的に正しいパスが入力されます。あなたはラムダ構文を使用する場合:

(from p in _pContext.Persons 
from i in p.Items 
select i).Include("Properties") 

または

(from p in _pContext.Persons 
from i in p.Items 
select i).Include(i => i.Properties) 
関連する問題