Уплощенная в глубину коллекция объектов иерархии с использованием 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. Я знаю, что могу определять свои собственные методы, чтобы делать что-то, но я хочу что-то, что основано только на методах, предоставляемых фреймворком.

Ответы на вопрос(4)

Ваш ответ на вопрос