Linq的Distinct方法
Person1: Id=1, Name= "Test1"
Person2: Id=1, Name= "Test1"
Person3: Id=2, Name= "Test2"
|
以上list如果直接使用distinct方法进行过滤,仍然返回3条数据,而需要的结果是2条数据。下面给出解这个问题的方法:
方法1: Distinct 方法中使用的相等比较器。这个比较器需要重写Equals和GetHashCode方法,个人不推荐,感觉较麻烦,需要些多余的类,并且用起来还要实例化一个比较器,当然自己也可以写一个泛型的比较器生成工厂用来专门生成比较器,但仍然觉得较麻烦。
MSDN给出的做法,具体参照:http://msdn.microsoft.com/zh-cn/library/bb338049.aspx
方法2:自己扩展一个DistinctBy。这个扩展方法还是很不错的,用起来很简洁,适合为框架添加的Distinct扩展方法。
public static IEnumerable<TSource> DistinctBy<TSource, TKey> ( this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
HashSet<TKey> seenKeys = new HashSet<TKey>();
foreach (TSource element in source)
{
if (seenKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
|
使用方法如下(针对ID,和Name进行Distinct):
var query = people.DistinctBy(p => new { p.Id, p.Name });
|
若仅仅针对ID进行distinct:
var query = people.DistinctBy(p => p.Id);
|
方法3:通过GroupBy分组后,并取出第一条数据。简单易用,很方便。这是一种迂回策略,代码理解起来没有Distinct表意清晰,虽然实现了效果。
List<Person> distinctPeople = allPeople
.GroupBy(p => new {p.Id, p.Name} )
.Select(g => g.First())
.ToList();
|
Linq的Distinct方法相关推荐
- Linq的Distinct方法的扩展
为什么80%的码农都做不了架构师?>>> 原文地址:如何很好的使用Linq的Distinct方法 Person1: Id=1, Name="Test1" P ...
- 如何很好的使用Linq的Distinct方法
Person1: Id=1, Name="Test1" Person2: Id=1, Name="Test1" Person3: Id=2, Name=&quo ...
- 【C#】详解使用Enumerable.Distinct方法去重
Enumerable.Distinct 方法 是常用的LINQ扩展方法,属于System.Linq的Enumerable方法,可用于去除数组.集合中的重复元素,还可以自定义去重的规则. 有两个重载方法 ...
- LINQ中ForEach方法的使用
标签: linq 2016-06-25 12:47 409人阅读 评论(0) 收藏 举报分类: LINQ(5) 我の原创(113) 版权声明:本文为博主原创文章,未经博主允许不得转载.LINQ中For ...
- 【More Effective C#】LINQ表达式与方法调用的映射
LINQ构建在两个概念之上,一种查询语言和一系列将查询语言转换成方法调用的实现.在编译时,编译器将LINQ表达式(LINQ to object)转换成方法调用. .Net基础类库提供了两种扩展方法.S ...
- mysql去重函数的使用方法_MySQL中使用去重distinct方法的示例详解
一 distinct 含义:distinct用来查询不重复记录的条数,即distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而 ...
- 增强 Stream 接口的 distinct 方法的一些思考
遇到的问题 Java 8 开始引入了 Stream, 其中的 api 一直在不断的优化更新完善,Java 9 中更是引入了 ofNullable 还有 takeWhile 和 dropWhile 这两 ...
- LinQ—高级查询方法
对于高级查询方法,主要分为五大类,详情下图: [Distinct]: 避免重复值出现,也就是如果有两个数字2,那么使用集合类可以单一出现 首先我们来写一个数组,方便举例: // 数组数据person ...
- Linq 的使用方法
LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性.已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰富的元数据,智能感 ...
最新文章
- 一文读懂因果推断的起源
- centos刻录工具_centos u盘引导制作工具下载|
- 计算机英语心得体会200字,英语读后感200字精选3篇
- 在MFC里面实现线程的实例
- linux标准I/O——格式化输出
- 使用solrj和EasyNet.Solr进行原子更新
- css3毛玻璃效果白边问题
- 让C# Excel导入导出,支持不同版本的Office
- 转摘:工厂方法模式(Factory Method Pattern)
- .net EventHandler 事件处理
- 火车进出站(POJ1363)
- 百度飞桨螺旋桨赋能生物医药,推动AI技术在药物研发领域的探索应用
- crc循环冗余校验码c语言,CRC循环冗余校验码的生成
- 回车键为什么叫做回车键?
- 小白怎么学习云计算?2020最新云计算学习路线图
- 一个java程序员看待互联网行业与物联网行业的区别
- Python 基于透明元素裁切图片(类似Photoshop)
- LINGO编程(基础)
- 细谈微商分销系统开发对企业的发展是好还是坏
- Urule Pro 普通决策表的应用,Excel导入决策表