私はASP.NETプロジェクトでEFを使用していますが、正しいクエリを見つけるためにいくつか問題があります。 私は遅延ロードせずに作業する必要があります。LINQ:入れ子にされた選択ステートメントを条件付きにする方法
私は次のデータ構造を持っています: モジュールにはページが含まれています。 ページにはPageItemsが含まれています。 PageItemにはItemが含まれています。 アイテムは他のアイテムを含むことができます。
最初に項目を含む項目の再帰的な側面を残して、単一のモジュールの構造をツリービューに供給するためのクエリが必要です。
私は何をしたいことは次のとおりです。
- モジュールParentItem_ID == 0
-
を持つすべての項目を含むすべてのPageItems
- を含むすべてのページ
- 含む所定ID
- で
- すべてのChildItemを含む
- 含む所定ID
- を含むすべてのページ
私はこれを開始しました:ページの直接の子としてのすべてのアイテムをこのクエリは動作しますが、それはアイテム階層とディスプレイを無視
return base._entities.Modules
.Include(m => m.Paginas
.Select(p => p.PaginaItems
.Select(pi => pi.Item)
.Select(i => i.ChildItems)))
.Where(m => m.Module_ID == id)
.FirstOrDefault();
。実際に必要なのは次のようなものです:
return base._entities.Modules
.Include(m => m.Paginas
.Select(p => p.PaginaItems
.Select(pi => pi.Item)
.Where(i => i.I_ParentItem_ID == 0)
.Select(i => i.ChildItems)))
.Where(m => m.Module_ID == id)
.FirstOrDefault();
しかし、それは動作しません。
私は比較的新しいLINQになりました。どんな助けでも本当に感謝しています。
この場合、明示的な 'join'を使うべきです。 –
どうすればいいですか? – ckonig
答えを見てください。 –