通过查看列表c#

时间:2019-04-16 10:41:22

标签: c# linq

我有一个包含父母和子女服务项目的列表。我需要将没有任何子服务的所有父服务和所有子服务合并到一个列表中。这意味着我要删除具有子项的项。如何使用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”。由于该父服务有两个子服务。我想在列表中保留所有其他父级和子级服务。

1 个答案:

答案 0 :(得分:2)

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

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