【发布时间】:2017-02-08 07:40:32
【问题描述】:
类结构
public clas Item
{
public Item Parent { get; set; }
public string Code { get; set; }
}
示例树
AAA
- AAB
- BBB
CCC
- CCA
所以我想通过 CODE == BBB 过滤树,结果应该是
AAA
- AAB
- BBB
但如果我像这样过滤
IQueryable<Item> itemsQuery = GetQuery();
itemsQuery = itemsQuery.Where(x => x.Code == "BBB")
结果不包含父节点。那么,如果父节点的子节点满足一定条件,如何包含父节点呢?
【问题讨论】:
-
您需要顶部的所有项目还是只需要一个?
-
尚不清楚 AAA 是否是 AAB 的父级,反之亦然。
-
如果你想创建一个结构(取决于你的需要),你可以尝试
itemsQuery.Where(x => x.Code == "BBB").Select(x => x.Parent)甚至使用new关键字。 -
你使用实体框架吗?如果你使用 EF,你应该
IncludeParent属性。如果不是,Item 是否已初始化?到目前为止你做了什么?GetQuery()是做什么的? -
简短的回答是你不能。 LINQ 在线性
IEnumerable序列上运行,而不是树结构。您要么需要重复访问数据库以获取父记录,要么需要更改数据库结构以更易于访问的方式表示层次结构。