私は EF を使用して ASP.NET プロジェクトで作業していますが、正しいクエリを見つけるのに問題があります。遅延読み込みなしで作業する必要があります。
次のデータ構造があります。モジュールにはページが含まれています。Page には PageItems が含まれます。PageItem には Item が含まれます。Item には他の Item を含めることができます。
まず、Items を含む Items の再帰的な側面を除外して、1 つのモジュールの構造をツリービューにフィードするためのクエリが必要です。
私が欲しいのは:
- 指定された ID を持つモジュール
- すべてのページを含む
- すべての PageItem を含む
- ParentItem_ID == 0 のすべてのアイテムを含む
- すべての ChildItem を含む
- ParentItem_ID == 0 のすべてのアイテムを含む
- すべての PageItem を含む
- すべてのページを含む
私はこれから始めました:
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に比較的慣れていないので、助けていただければ幸いです。