【问题标题】:Linq - get elements that are top in hierarchyLinq - 获取层次结构顶部的元素
【发布时间】:2014-11-19 03:20:43
【问题描述】:

我有以下数据:

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

2 and 34

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

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

这是表格数据在可视化树中的排列方式:

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

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

如何在 linq 查询中获取顶级父母,然后如何获取孩子等?

【问题讨论】:

    标签: c# linq linq-to-objects


    【解决方案1】:

    编辑: 要获得 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)
    

    【讨论】:

    • 顶级父母意味着在树结构中是最顶级的元素。 ID 2 和 ID 34 是最顶层的节点。我需要得到那些,然后在其他查询孩子,等等。
    • 现在我可以看到,让我试试
    • 我怎样才能有一个循环功能,这样我就可以检查所有深度,而不是一一检查是否有孩子等?顺便提一句。它对父节点起作用
    • 您可以使用上面的示例代码向GetChildren 编写一个接受Parent 的函数来获取父级的子级,然后递归调用它。您使用什么数据结构来存储信息?
    • 让我创建一个新问题,并为您提供包含该信息的链接。首先让我检查答案:) 非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多