【发布时间】:2012-05-07 03:23:04
【问题描述】:
我正在使用 EF 处理 ASP.NET 项目,但在查找正确查询时遇到了一些麻烦。 我需要在没有延迟加载的情况下工作。
我有以下数据结构: 一个模块包含页面。 Page 包含 PageItem。 PageItem 包含一个项目。 一个 Item 可以包含其他 Item。
首先忽略包含项目的项目的递归方面,我需要一个查询来将单个模块的结构提供给树视图。
我想要的是:
- 具有给定 ID 的模块
- 包括所有页面
- 包括所有页面项
- 包括 ParentItem_ID == 0 的所有项目
- 包括所有 ChildItems
- 包括 ParentItem_ID == 0 的所有项目
- 包括所有页面项
- 包括所有页面
我是从这个开始的:
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,任何帮助都将不胜感激。
【问题讨论】:
-
在这种情况下,您应该使用明确的
joins。