[C#]在使用 LINQ 的列表中找到顶级父

标签: Linq C#
发布时间: 2017/2/27 4:17:18
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我已经有一个 ID 和 ParentID 的用户定义的对象的列表。列表中看起来像这样。

ParentID     ID
  123        345
  123        456
  456        567
  456        678
  678        789

我需要一个 LINQ 语句来找到顶级父;那就是,所有对象在哪里 ParentID 中不存在作为 ID (在此示例中,只有 123)。

这是到目前为止所,它返回 567,678,789。

parentList = baseList.Where(b => !baseList.Select(o => o.ParentID).Distinct().Contains(b.ID)).ToList();

解决方法 1:

您当前的查询试图找到所有的项目,在那里他们的 ID 并不对应于任何其他项的父 ID — — 换句话说,你会发现没有子女的所有节点。

它听起来像你想要的是没有父母的节点 — — 那些其父 ID 不匹配任何其他项的 id。

var ids = new HashSet<int>(baseList.Select(o => o.ID));
var itemsWithNoParent = baseList.Where(o => !ids.Contains(o.ParentID))
    .ToList();

我使用的 HashSet<> ,确保合理 .Contains() 大型集合的性能。

赞助商