首页 > 解决方案 > 通过检查列表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”。因为该父服务有两个子服务。我想将所有其他父子服务保留在列表中。

标签: c#linq

解决方案


您需要过滤每个服务,其中服务的 ID 不是集合中任何其他服务的父 ID。

var result = ServiceList
    .Where(parent => !ServiceList.Any(child => parent.Id == child.Parent));

推荐阅读