加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用LINQ在List中查找顶级父级

发布时间:2020-12-15 23:24:25 所属栏目:百科 来源:网络整理
导读:我有一个具有ID和ParentID的用户定义对象列表.列表看起来像这样. ParentID ID 123 345 123 456 456 567 456 678 678 789 我需要一个LINQ语句来查找顶级父级;也就是说,ParentID不存在的所有对象都作为ID(在本例中,仅为123). 这是我到目前为止,它返回567,678,7
我有一个具有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();

解决方法

您当前的查询正在尝试查找其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()在大型集合上的表现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读