Linq - 获取层次结构中最顶层的元素

时间:2014-11-19 03:20:43

标签: c# linq linq-to-objects

我有以下数据:

enter image description here

我需要获取树数据结构中的顶级元素。 AncestorId等于DescendantId的所有行都是父母,但我需要先得到最高父母。例如:

2 and 34

带有ID 2的Becuase元素只在descendantid列中存在一次,对于带有ID 34的元素也是如此。

然后我必须让孩子们在ID 2ID 34以下等等,这样我才能开始构建我的树结构。

这是表数据在可视树中的外观:

enter image description here

现在我有以下Linq语句来获取父节点:

// get parent nodes
var parentNodes = data.Where(i => i.AncestorId == i.DescedantId ).ToList();

我怎样才能获得最高父母的linq查询,以及如何让孩子等?

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

编辑: 要获得Top父母(即他们只在Descendant Id中出现一次),您可以执行以下操作

var parentNodes = data
    .Where(i => i.AncestorId == i.DescedantId &&
                (data.Count(d => d.DescedantId == i.DescedantId) == 1))
    .ToList();

为了得到父母的孩子:

var allChildren = data.Except(parentNodes);
var someParent = parentNodes.First();
var someParentsChildren = 
    allChildren.Where(i => i.AncestorId == someParent.DescendantId)