Recopilación aplanada en profundidad de una jerarquía de objetos utilizando LINQ

Tengo una jerarquía de objetos (MasterNode -> ChildNodes) donde los nodos maestro e hijo son del mismo tipo, y solo hay dos niveles (nivel superior e hijo) como este ('A' es el padre de D, E y F, ' B 'es padre de G, etc)

A--+
|  D
|  E
|  F
|
B--+
|  G
|
C--+
   H
   I

Supongamos que tengo unMasterNodes como un IEnumerable de los objetos principales (A, B, C) y dado un objeto principalX Puedo conseguir un IEnumerable de sus hijos porX. niños

Sé que puedo enumerar todas las hojas (nodos secundarios) con elSelectMany método o utilizando

from parent in Masternodes
from child in parent.children
select child

Esto me dará esta secuencia:

[D,E,F,G,H,I]

, pero esto no es lo que estoy pidiendo.

¿Cuál es la consulta LINQ para obtener una secuencia de profundidad de los objetos en la colección MasterNodes? (devuelva el primer padre, luego todos sus hijos, luego el siguiente padre, luego todos sus hijos, etc.)

El resultado esperado debería ser una secuencia como esta:

[A,D,E,F,B,G,C,H,I]

ACTUALIZAR:

Estoy pidiendo LINK puro para .NET. Sé que puedo definir mis propios métodos para hacer cosas, pero quiero algo que se base solo en los métodos proporcionados por el marco.

Respuestas a la pregunta(4)

Su respuesta a la pregunta