c# - 如何使用 LINQ 查找和删除集合中的重复对象?

标签 c# .net linq collections duplicates

我有一个表示对象的简单类。它有 5 个属性(一个日期、2 个小数、一个整数和一个字符串)。我有一个派生自 CollectionBase 的集合类,它是一个容器类,用于保存我的第一个类中的多个对象。

我的问题是,我想删除重复的对象(例如具有相同日期、相同小数、相同整数和相同字符串的对象)。是否有我可以编写的 LINQ 查询来查找和删除重复项?或者至少找到它们?

最佳答案

您可以使用 Distinct 删除重复项运营商。

有两个重载 - 一个使用您的类型的默认相等比较器(对于自定义类型将调用类型上的 Equals() 方法)。第二个允许您提供自己的相等比较器。它们都返回一个新序列,代表您没有重复的原始集。 两个重载实际上都不会修改您的初始集合 - 它们都返回一个排除重复项的新序列。

如果你只想找到重复的,你可以使用GroupBy这样做:

var groupsWithDups = list.GroupBy( x => new { A = x.A, B = x.B, ... }, x => x ) 
                         .Where( g => g.Count() > 1 );

从类似 IList<> 的内容中删除重复项你可以这样做:

yourList.RemoveAll( yourList.Except( yourList.Distinct() ) );

关于c# - 如何使用 LINQ 查找和删除集合中的重复对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3239523/

相关文章:

c# - 使用 Excel 数据的简单任务未完成运行导致 "ContextSwitchDeadlock"

c# - 带有 asp.net mvc 3 的 jquery 网络摄像头插件

.net - 我可以反射 .NET 基类库 (BCL) 吗?

c# - 使用 LINQ 从 XML 获取最大属性值

c# - 使用 LINQ 在 C# 中计算文件数

c# - 是否可以在大括号内使用占位符?

Bron-Kerbosch算法的C#实现

c# - 如何抑制 "possible unintended reference comparison"警告?

linq 包含条件

c# - 错误读取配置 : Could not load type . .. 来自程序集 'System.Configuration