如何找到分层树的最后一个节点c#

如何找到分层树的最后一个节点c#,c#,linq,C#,Linq,我想找到层次结构树的最后一项 class Node { public int Id { get; set; } public int ParentId { get; set; } public string Name { get; set; } } var list=新列表{ 新节点{Id=1,ParentId=0,Name=“n1”}, 新节点{Id=2,ParentId=1,Name=“n1.1”}, 新节点{Id=3,ParentId=1,Name=“n1.2”

我想找到层次结构树的最后一项

class Node
{
    public int Id { get; set; }
    public int ParentId { get; set; }
    public string Name { get; set; }
}

var list=新列表{
新节点{Id=1,ParentId=0,Name=“n1”},
新节点{Id=2,ParentId=1,Name=“n1.1”},
新节点{Id=3,ParentId=1,Name=“n1.2”},
新节点{Id=4,ParentId=2,Name=“n1.1.1”},
新节点{Id=5,ParentId=2,Name=“n1.1.2”},
新节点{Id=6,ParentId=2,Name=“n1.1.3”}
};

对于c#或linq查询,这可能吗?

最后一个节点是那些不是其他父节点的节点

使用此查询:

var q = list.Where(x => list.All(y => y.ParentId != x.Id));

这就是你想要的

var hasChild = list.Select(n => n.ParentId); 
var lastNodes = list.Where(n => !hasChild.Contain(n.Id));  

当然,您已经尝试了什么?尝试找出with Id没有用作ParentId也可以在内部条件
列表中使用。Count(y=>y.ParentId==x.Id)==0
var hasChild = list.Select(n => n.ParentId); 
var lastNodes = list.Where(n => !hasChild.Contain(n.Id));