lambda 根据属性去重_扩展lamda表达中distinct按照字段去除重复
首先,我们定义一个Student类来测试.
public classStudent
{public int ID { get; set; }public string Name { get; set; }public int Age { get; set; }
}
List data = new List{new Student(){ID=1,Name="名字1",Age=15},new Student(){ID=1,Name="名字2",Age=15},new Student(){ID=3,Name="名字3",Age=17},new Student(){ID=4,Name="名字4",Age=18},new Student(){ID=5,Name="名字5",Age=19},new Student(){ID=6,Name="名字6",Age=20}
};
在这样一个数据中. 我们发现,如果使用自带的 Distinct ,发现得数据依然是一样,并没有想象中的去除重复。
以下,给出几个解决方案。
第一种: 继承EqualityComparer
我们新建一个类。如下。且必须重写父类中的抽象方法。Equals和GetHashCode
public class StudentComparer : EqualityComparer{public override boolEquals(Student s1, Student s2)
{//这里写你要去除重复的条件。
return s1.ID == s2.ID && s1.Name ==s2.Name;
}public override intGetHashCode(Student student)
{returnstudent.ID.GetHashCode();
}
}
使用方法:data.Distinct(new StudentComparer());
可以达到我们预料的效果,当然,这样比较麻烦一点。
第二种。我们可以根据非关联泛型集合HashSet中的唯一性对distinct扩展
如何写扩展方法,这里我就不再细说。
具体扩展如下。
namespaceSystem.Linq
{public static classClass1
{public static IEnumerable DistinctBy2(this IEnumerable source, Funcwhere)
{
HashSet hashSetData= new HashSet();foreach (T item insource)
{if(hashSetData.Add(where(item)))
{yield returnitem;
}
}
}
}
}
使用方法如下:data.DistinctBy2(p => new { p.ID,p.Name}).ToList(); //其中new {p.ID,P.Name}这里可指定要根据去重的字段
第三种。直接简单一点。通过先分组,然后在每个组里面取第一项。
代码如下:
//Lamda: new {item.ID,item.Name}指定去重字段
data.GroupBy(item => new { item.ID,item.Name }).Select(item => item.First()).ToList();//-----------------------------------------------------------------//Linq new {item.ID,item.Name}指定去重字段
(from item indata
group item bynew{ item.ID,item.Name} into gselect g.First()).ToList();
以上三种,都可以达到去重效果。当然,你可以选择第二种的扩展方法。
具体使用,看个人喜欢。
本文到此结束。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
lambda 根据属性去重_扩展lamda表达中distinct按照字段去除重复相关推荐
- python的os库的remove可以删除只带有只读属性的_扩展库os中的方法remove()可以删除带有只读属性的文件。(2.0分)_学小易找答案...
[填空题]已知 x = {1, 2, 3},那么执行语句 x.add(3) 之后,x的值为__.(2.6分) [填空题]假设已从标准库functools导入reduce()函数,那么表达式 reduc ...
- java 反射父类私有属性值_如何在Java中通过反射访问父类的父类的私有字段? - java...
在一个API中,我使用的是一个抽象类(A类),该类具有一个私有字段(A.privateField). B类在API中扩展了A类. 我需要扩展B类的实现,即C类,但是我需要A类的privateField ...
- listrecord根据某个属性去重_天刀手游琅纹搭配攻略,全门派全装备最细节提属性教学...
天刀手游的琅纹系统是角色相当重要的属性来源之一,在整个游戏进程中,玩家之间功力拉开差距的地方主要就是琅纹. 如果各位不是重氪玩家,请记住一点,这是一个养成类游戏,一定要量力而行,选择正确的搭配很重要. ...
- listrecord根据某个属性去重_去哪网开发实战记录(9):城市选择页(中)
兄弟组件之间的联动 所谓的兄弟组件之间的联动,其实就是实现点击右侧的字母就能跳转至对应的首字母城市,因此列表组件需要知道右侧的字母列表的点击事件所对应的元素字母,这就需要兄弟组件间的数据传递了(Alp ...
- slot属性值_深入理解vue中的slot与slot
作者/云荒杯倾 写在前面 vue中关于插槽的文档说明很短,语言又写的很凝练,再加上其和methods,data,computed等常用选项使用频率.使用先后上的差别,这就有可能造成初次接触插槽的开发者 ...
- python对象属性赋值_关于python对象 中dict属性赋值的疑问
下面这段代码 很奇怪 把两个对象放在一个 list中 然后循环操作两个对象 中 一个dict key的数值 但是循环操作输出的时候发现 两个对象的 值会叠加 #!/usr/bin/env python ...
- 修改mongodb最大查询数_根据Mongodb查询中的一个字段查找最大连续记录数
我想根据一个特定字段找到最大连续记录的数量. 在根据字段查找排序后,我的db.people集合是: > db.people.find().sort({ updated_at: 1}) { &qu ...
- server sql 中类型为bit应该插入什么值_关于SQL Server中bit类型字段增删查改的一些事...
前言 本文主要给大家介绍了关于SQL Server中bit类型字段增删查改的一些事,话说BIT类型字段之前,先看"诡异"的一幕,执行Update成功,但是查询出来的结果依然是1,而 ...
- java 实体类返回大写_解决springboot bean中大写的字段返回变成小写的问题
例如我的bean中有以下4个字段 private String code; private String _TOKENUUMS; private String TGC; private String ...
最新文章
- 多版本python共存,安装三方库到指定python版本 多Python版本和虚拟环境
- C++ sizeof 运算符的使用
- android+对比标签选择顺序是否正确的是,2019年Android题库含答案.docx
- (总结1)HTML5中新增加的表单元素
- OCP12C题库,63数据库管理( Administration Workshop- 63)(新增)
- Python访问MySQL数据库并实现其增删改查功能
- matlab ask函数,matlab函数大全(非常实用)
- CSS3学习手记(10) 过渡
- MOSS站点的FORM认证修改小结
- php检测数组类型,javascript中通过哪些方法来检测数组类型?
- python类与对象 封装继承与多态 0308
- 上层应用开发是否真的没有底层开发有前途?
- 安装了PS2022 后,画笔工具使用延迟,操作卡到无法忍受,PS 插件合都卸载掉、设置暂存盘等方法都没有效果
- 基于OpenCV做“三维重建”(1)--找到并绘制棋盘
- idea中类和方法创建文档注释
- Qualcomm msm8996 调试AMOLED屏
- 初识Excel的IF, IFERROR, MATCH, COUNTA公式
- 分享商品生成海报的需求技术点总结
- 用python写学籍管理系统_使用Python实现 学生学籍管理系统
- 双目是个词吗_什么双目的四字词语
热门文章
- 超级简单的Region对比识别验证码
- maven00----maven学习说明
- iOS开发——高级篇——iOS开发之网络安全密码学
- Yum未完成事务问题
- Android学习——SharedPreferences
- 多校#5-1005-Instring-HDU5785-manacher+维护
- 窥探算法之美妙——寻找数组中最小的K个数python中巧用最大堆
- Linux 关闭防火墙命令
- 安装中文VS2008 SP1 和.NETFRAMEWORK 3.5SP1后智能提示是英文的解决办法
- AndroidStudio_安卓原生开发_获取系统S/N序列号_实现在springboot服务端_设备远程保活监控---Android原生开发工作笔记159