C#List .RemoveAll() – 如何删除列表的子集?

我有2个类feed_Auto和具有多个匹配属性的Product 。 对于此特定问题,AutoID是我需要使用的唯一字段。

我有一个List ,有几百个唯一条目。 我有一个小的List有10个,20个唯一条目。 我现在想要从大列表中删除小列表中的所有项目。

如何使用RemoveAll({lambda expression})来完成此任务? 我发现的所有示例都取决于通用列表是简单类型(字符串,整数等)。

 private static int DoInserts(ref List source, ref List target, Guid companyID) { List newProductList = new List(); List dropSourceList = new List(); using (var db = Helpers.GetProdDB()) { foreach (var src in source) { var tgt = target.Where(a => a.alternateProductID == src.AutoID && a.LastFeedUpdate  0) { source.RemoveAll(????); } } } 

要在循环中执行此操作并不困难:

 foreach (var drop in dropSourceList) { source.RemoveAll(a => a.AutoID == drop.AutoID); } 

对于我来说,循环一个集合来为每个传递中的一个项目调用RemoveAll是没有意义的。

您可以使用Any来简化

 source.RemoveAll(a => dropSourceList.Any(b => a.AutoID == b.AutoID)); 

您可以通过首先创建ID的HashSet来减少循环:

 var toRemove = new HashSet(dropSourceList.ConvertAll(a => a.AutoID)); source.RemoveAll(a => toRemove.Contains(a.AutoID));