我有以下类型:
public class Category
{
public string Id { get; set; }
public string ParentId { get; set; }
public string Title { get; set; }
}
顶级类别的ParentId
值为0.任何子类别都通过ParentId
属性与其各自的父级相关。
我正在尝试实现一种很好的方法来确定哪个是树中的最后一个子树(无论树是多么深),所以在下面的例子中,我希望返回'Laptops'条目(或者至少Id):
ID :10 ParentId :0 标题:待售
ID :5 ParentId :10 标题:计算机
ID :20 ParentId :5 标题:笔记本电脑
即。该等级为“待售”> '计算机'> '笔记本电脑'。
此层次结构可能只包含1个类别,或者在某些情况下可能包含5个以上的儿童。
答案 0 :(得分:3)
使用LINQ,您可以像这样实现:
var LeafNodes = YourItemsList.Where(x => !YourItemsList.Any(y => y.ParentID == x.Id));
现在你可以遍历这个可枚举项,并且对于每个项目,你可以走上父节点以获得完整的链。
答案 1 :(得分:2)
通过创建以父ID作为键的查找,您可以轻松找到给定节点的所有子节点,从而可以轻松找到没有子节点的所有节点。
var lookup = categories.ToLookup(category => category.ParentId);
var leaves = categories.Where(category => !lookup[category.Id].Any());