c# - 通过检查列表c#的父ID,当有子项时从列表中删除父项
问题描述
我有一个包含父服务项目和子服务项目的列表。我需要将所有没有任何子服务的父服务和所有子服务放入一个列表中。这意味着我想删除具有子项目的项目。如何使用 LINQ 做到这一点?我的清单如下
public class Service
{
public int Id { get; set; }
public string Name { get; set; }
public int Parent { get; set; }
}
var ServiceList = new List<Service>();
ServiceList.Add(new Service() { Id = 1, Name = "service 1", Parent= -1 });
ServiceList.Add(new Service() { Id = 2, Name = "service 2", Parent= -1 });
ServiceList.Add(new Service() { Id = 3, Name = "service 3", Parent= -1 });
ServiceList.Add(new Service() { Id = 4, Name = "Service 4", Parent= 2 });
ServiceList.Add(new Service() { Id = 5, Name = "Service 5", Parent = 2 });
ServiceList.Add(new Service() { Id = 6, Name = "Service 6", Parent = -1 })
使用上面的列表,我想从列表中删除“服务 2”。因为该父服务有两个子服务。我想将所有其他父子服务保留在列表中。
解决方案
您需要过滤每个服务,其中服务的 ID 不是集合中任何其他服务的父 ID。
var result = ServiceList
.Where(parent => !ServiceList.Any(child => parent.Id == child.Parent));
推荐阅读
- javascript - Vue如何将forloop按钮表分成表中的不同行
- android - 为什么同一个本机线程似乎从不同的 Java 线程调用方法?
- typescript - 带有 Typescript 3.8.3 的 Angular 9 是默认支持 IE 中的可选链接,而无需更改 polyfill (core-js)?
- r - 我已将 r shiny 文件中的变量分配给全局环境,但我的脚本文件无法访问它
- ansible - Ansible 解析我的 YML 注释并将其误认为 k=v
- r - `UseMethod()` 与 `inherits()` 在 R 中确定对象的类
- sql - 从 2 个不同表的 2 列创建一列
- angular - Angular 8:在通过 HTTP 调用获取所需数据后渲染子组件
- android - 如何让谷歌播放过滤我的平板电脑应用
- r - 过滤所有小于 x 的行,所有后续值也小于 x