我有一个对象层次结构(MasterNode -> ChildNodes),其中主节点和子节点是相同类型的,只有两个级别(顶级和子级)像这样('A' 是 D、E 和 F 的父级,'B' 是 G 的父级等)
A--+
| D
| E
| F
|
B--+
| G
|
C--+
H
I
假设我有一个大对象(A,B,C)的IEnumerable作为MasterNodes,并给定一个父对象X,我可以通过X.children获取其子级的IEnumerable。
我知道可以使用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]
更新:
我需要纯粹的.NET LINQ。我知道可以定义自己的方法来实现,但我想要的是只基于框架提供的方法来实现。