我有一个包含 ID 和 ParentID 的用户定义对象列表。该列表看起来像这样。
ParentID ID
123 345
123 456
456 567
456 678
678 789
Run Code Online (Sandbox Code Playgroud)
我需要一个 LINQ 语句来查找顶级父级;也就是说,ParentID 不作为 ID 存在的所有对象(在本例中,只有 123 个)。
这是我到目前为止所拥有的,它返回了 567,678,789。
parentList = baseList.Where(b => !baseList.Select(o => o.ParentID).Distinct().Contains(b.ID)).ToList();
Run Code Online (Sandbox Code Playgroud)
您当前的查询正在尝试查找其 ID 与任何其他项目的父 ID 不对应的所有项目——换句话说,您正在查找所有无子节点。
听起来您想要的是所有无父节点——那些父 ID 与任何其他项目的 ID 都不匹配的节点。
var ids = new HashSet<int>(baseList.Select(o => o.ID));
var itemsWithNoParent = baseList.Where(o => !ids.Contains(o.ParentID))
.ToList();
Run Code Online (Sandbox Code Playgroud)
我正在使用 aHashSet<>来确保.Contains()大型集合的合理性能。
| 归档时间: |
|
| 查看次数: |
1963 次 |
| 最近记录: |