加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:11:58 所属栏目:百科 来源:网络整理
导读:我有一个表示对象的简单类.它有5个属性(日期,2位小数,一个整数和一个字符串).我有一个派生类,派生自CollectionBase,它是一个容器类,用于从我的第一个类中保存多个对象. 我的问题是,我想删除重复的对象(例如,具有相同日期,相同小数,相同整数和相同字符串的对
我有一个表示对象的简单类.它有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() ) );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读