2016-11-02 4 views
-4

階層ツリーの最後のアイテムを探したい。階層ツリーの最後のノードを見つける方法C#

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

enter image description here

var list = new List<Node> { 
     new Node {Id = 1, ParentId = 0, Name = "N 1"}, 
     new Node {Id = 2, ParentId = 1, Name = "N 1.1"}, 
     new Node {Id = 3, ParentId = 1, Name = "N 1.2"}, 
     new Node {Id = 4, ParentId = 2, Name = "N 1.1.1"}, 
     new Node {Id = 5, ParentId = 2, Name = "N 1.1.2"}, 
     new Node {Id = 6, ParentId = 2, Name = "N 1.1.3"} 
    }; 

は、C#またはLINQクエリを使用してこの可能ですか?

+4

を望むものである、あなたはすでに何を試してみましたか? – hofmeister

+0

Idで検索しようとするとParentIdとして使用されません – Oswald

答えて

2

最後のノードは、他のノードの親ノードではないノードです。

使用このクエリ:

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

'list.Count(y => y.ParentId == x.Id)== 0'という内部条件でも使用できました。 – Abion47

0

これは、あなたがもちろん

var hasChild = list.Select(n => n.ParentId); 
var lastNodes = list.Where(n => !hasChild.Contain(n.Id)); 
関連する問題