我有一个简单的对象列表“ProductGroups”(IQueryable)。 每个“ProductGroup”都有一个称为“Children”的ProductGroups集合,一个整数ParentId字段和一个布尔型“IsEnabled”字段。用LINQ过滤整个分层列表
public class ProductGroup
{
public int Id;
public int ParentId;
public ICollection<ProductGroup> Children;
public bool IsEnabled;
}
我希望能够返回“IsEnabled”为true的ProductGroups树。
此刻,如果我做
ProductGroups.Where(x => x.IsEnabled)
这将返回功能的产品。如果我做
ProductGroups.Where(x => x.ParentId == null)
这将返回根。我希望能够以尽可能最小的方式返回完整的树(不包括禁用的项目)(即在查询集合后不使用for循环)。
ProductGroup1 (IsEnabled == true)
|
--------- ProductGroup2 (IsEnabled == true)
| |
| ----------- ProductGroup4 (IsEnabled == false)
|
--------- ProductGroup4 (IsEnabled == false)
即返回ProductGroup1与1名儿童ProductGroup2
感谢
LINQ总是会返回一个平坦的IEnumerable,所以你要查找的内容(真的)是树的根?真的吗?如果是这样,为什么不向ProductGroup添加一个返回已启用子项(仅)的函数并将该函数与您的根一起使用?或者你真的试图让IEnumerable包含所有已启用的节点及其子节点到树叶? – Kevek