2016-11-02 2 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)); 
Смежные вопросы