Уплощенная в глубину коллекция объектов иерархии с использованием LINQ
У меня есть иерархия объектов (MasterNode -> ChildNodes), где главный и дочерний узлы имеют одинаковый тип, и есть только два уровня (верхний уровень и дочерние), как этот («A» является родителем D, E и F). , 'B' является родителем G и т. д.)
A--+
| D
| E
| F
|
B--+
| G
|
C--+
H
I
Предположим, у меня естьMasterNodes как IEnumerable родительских объектов (A, B, C) и заданный родительский объектX Я могу получить много своих детейX.children
Я знаю, что могу перечислить все листы (дочерние узлы) сSelectMany метод или с помощью
from parent in Masternodes
from child in parent.children
select child
Это даст мне эту последовательность:
[D,E,F,G,H,I]
, но это не то, что я прошу.
What is the LINQ query to get a depth-first sequence of the objects in the MasterNodes collection? (вернуть первого родителя, потом всех его потомков, потом следующего родителя, потом всех его потомков и т. д. и т. д.)
Ожидаемый результат должен быть такой:
[A,D,E,F,B,G,C,H,I]
UPDATE:
Я прошу чистый .NET готов LINQ. Я знаю, что могу определять свои собственные методы, чтобы делать что-то, но я хочу что-то, что основано только на методах, предоставляемых фреймворком.