如何使用 Linq 获取每个分组中的第一个元素?
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用 Linq 获取每个分组中的第一个元素?相关的知识,希望对你有一定的参考价值。
咨询区
Arian:
考虑下面的记录:
Id F1 F2 F3
-------------------------------------------------
1 Nima 1990 10
2 Nima 1990 11
3 Nima 2000 12
4 John 2001 1
5 John 2002 2
6 Sara 2010 4
我的需求是对 F1
字段进行分组然后按 Id
排序,最后从每个分组中提取出第一条记录项,类似下面的结果。
Id F1 F2 F3
-------------------------------------------------
1 Nima 1990 10
4 John 2001 1
6 Sara 2010 4
请问我如何用 Linq
来实现?
回答区
Rubens Mussi Cury:
可以有三种实现方式。
扩展方法实现
这种实现非常简单,参考如下代码:
var result = input.GroupBy(i => i.F1).Select(g => g.First());
扩展一下,如果想按照多个关键词分组,可以这样。
var result = input.GroupBy(i => new {i.F1, i.F2}).Select(g => g.First());
关键词实现
可以借用 from ... in ... group ... by ... into ... select
模式,参考如下代码:
var res = from element in list
group element by element.F1
into groups
select groups.OrderBy(p => p.F2).First();
混合实现
混合实现的话,可以先 OrderBy 再 GroupBy ,参考如下代码:
var res = (from element in list)
.OrderBy(x => x.F2)
.GroupBy(x => x.F1)
.Select()
点评区
其中从每个分组中提取第一项的需求在实际业务开发中还是蛮多的,Rubens Mussi Cury
大佬用了三种方法做了实现,学习了。
以上是关于如何使用 Linq 获取每个分组中的第一个元素?的主要内容,如果未能解决你的问题,请参考以下文章
通过 linq 对实体查询进行分组,以通过加入表来获取具有最新时间戳的一条记录
pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用first函数获取每个分组数据中每个分组的第一个样本数据