我有一个来自数据库的项目集合,该数据库具有 parentid
值或 null。
这是我的类(class)设计:
public class Item
{
public int id{get;set;}
public string Name{get;set;}
public int? ParentId{get;set;}
public List<Item> SubItems{get;set;}
}
我想从集合中构建项目的层次结构。假设一个集合有 100 个项目,我需要从中构建基于 ParentId 映射的结构。
我试过这篇文章 Recursive Hierarchical Joins in C# and LINQ 但如果 ParentId 为空,它会给我一个错误。
也试过Build tree type list by recursively checking parent-child relationship C# ,但此解决方案也不适合我。
我如何实现这一目标?
最佳答案
您可以使用这种方法:
- 从数据库中获取所有项目(不填充子项目)。
- 构建
Lookup<int?,Item>
父 ID 和具有该父 ID 的项目。 - 遍历项目并使用查找将每个项目与子项目相关联。
代码:
var items = // get from the database... (e.g. as a list)
var lookup = items.ToLookup(x => x.ParentId);
foreach (var item in items)
item.SubItems = lookup[item.Id].ToList();
正如 @EamonNerbonne 在下面评论的那样,如果需要,您也可以获得根元素:
var roots = lookup[null].ToList();
关于c# - 递归层次父子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18030091/