У меня есть иерархия объектов (MasterNode -> ChildNodes), где главный и дочерний узлы имеют один и тот же тип, и есть только два уровня (верхний уровень и дочерние элементы), подобных этому ('A' является родительским для D, E и F, ' B 'является родительским для G и т. Д.)
A--+
| D
| E
| F
|
B--+
| G
|
C--+
H
I
Предположим, у меня есть MasterNodes в качестве IEnumerable родительских объектов (A, B, C), и, учитывая родительский объект X, я могу получить IEnumerable его дочерних объектов с помощью X. дети
Я знаю, что могу перечислить все листы (дочерние узлы) с помощью метода SelectMany или с помощью
from parent in Masternodes
from child in parent.children
select child
Это даст мне такую последовательность:
[D,E,F,G,H,I]
, но я не об этом прошу.
Что такое запрос LINQ для получения последовательности объектов в коллекции MasterNodes в первую очередь в глубину? (вернуть первого родителя, затем всех его дочерних узлов, затем следующего родителя, затем всех его дочерних узлов и т. д.)
Ожидаемый результат должен быть такой:
[A,D,E,F,B,G,C,H,I]
ОБНОВЛЕНИЕ:
Я прошу чистый LINQ, готовый к .NET. Я знаю, что могу определять свои собственные методы, но мне нужно что-то, основанное только на методах, предоставляемых фреймворком.