根据子选择选择并仅显示父节点

时间:2014-09-08 13:54:56

标签: c# linq list

如何有一个嵌套的层次结构列表:

A--A1---A2
|        |
|        A21
|
B--B1---B2
|   |     |
|   B11  B21
|
C--C1---C2
|   |     |
|   C11  C21

现在我的选择将只在Leaf节点上,即B21然后只有B-B2 - B21-应该在我的列表中。

B----B2
|     |
|    B21
|

我怎样才能以更智能的方式或任何能够传递其父节点的任何节点执行此操作。

1 个答案:

答案 0 :(得分:1)

由于each node has a reference to its parent获取一个包含其所有父节点的节点序列非常简单:

public static IEnumerable<T> Ancestors<T>(T node, Func<T, T> parentSelector)
{
    T current = node;
    while(current != null)
    {
        yield return current;
        current = parentSelector(current);
    }
}

然后,您可以传入一个节点和一个指示如何获取其父节点的函数:

var Ancestors = Ancestors(node, n => n.Parent);