我正在使用 EF 处理 ASP.NET 项目,但在查找正确查询时遇到了一些麻烦。我需要在没有延迟加载的情况下工作。
我有以下数据结构:模块包含页面。Page 包含 PageItem。PageItem 包含一个项目。一个项目可以包含其他项目。
首先忽略包含项目的项目的递归方面,我需要一个查询来将单个模块的结构提供给树视图。
我想要的是:
- 具有给定 ID 的模块
- 包括所有页面
- 包括所有 PageItem
- 包括 ParentItem_ID == 0 的所有项目
- 包括所有 ChildItems
- 包括 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,任何帮助都将不胜感激。