如何使用 Linq 获取每个分组中的第一个元素?

咨询区

  • Arian

考虑下面的记录:

Id          F1            F2             F3 -------------------------------------------------1           Nima          1990           102           Nima          1990           113           Nima          2000           124           John          2001           15           John          2002           2 6           Sara          2010           4

我的需求是对 F1 字段进行分组然后按 Id 排序,最后从每个分组中提取出第一条记录项,类似下面的结果。

Id          F1            F2             F3 -------------------------------------------------1           Nima          1990           104           John          2001           16           Sara          2010           4

请问我如何用 Linq 来实现?

回答区

  • Rubens Mussi Cury

可以有三种实现方式。

  1. 扩展方法实现

这种实现非常简单,参考如下代码:

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());
  1. 关键词实现

可以借用 from ... in ... group ... by ... into ... select 模式,参考如下代码:

var res = from element in listgroup element by element.F1into groupsselect groups.OrderBy(p => p.F2).First();
  1. 混合实现

混合实现的话,可以先 OrderBy 再 GroupBy ,参考如下代码:

var res = (from element in list).OrderBy(x => x.F2).GroupBy(x => x.F1).Select()

点评区

其中从每个分组中提取第一项的需求在实际业务开发中还是蛮多的,Rubens Mussi Cury 大佬用了三种方法做了实现,学习了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle unpivot 空值,sql – 处理UNPIVOT中的NULL值

这很难看,但不依赖于必须找到NULL的带外替换:declare pivot_task table(age int null,[a] numeric(8,2),[b] numeric(8,2),[c] numeric(8,2),[d] numeric(8,2),[e] numeric(8,2));insert into pivot_task values (18, 0.5, null, 0.6, 1.21, 1.52),(19, 7.51, 6.51,…

android笔记之在WebView中显示ProgressBar的两种方法

http://blog.csdn.net/liuzhidong123/article/details/6450334 本文基于Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名http://www.cnblogs.com/luminji(包含…

绝对不能错过!2009~2019 高中数学联赛11年真题解析

全世界只有3.14 % 的人关注了爆炸吧知识参加过高中数学联赛的同学都知道,全国高中数学联赛作为中国数学会及各省、市、自治区数学会的一项经常性工作,是属于较高等级的数学竞赛,其地位远高于各省自行组织的数学竞赛。为什么这个竞赛会这么特别…

在Win7中怎样打开摄像头?

在Win7中怎样打开摄像头?标题所说的问题在我装了win7后也遇到了,当时我也只会用等下我说的第一个方法打开摄像头,不过幸运的是我在前些天了解到了另外一个方法,那么现在我先讲下这个问题出现的原因吧:在Win7推出后就因…

python gdb coredump_Linux段错误及GDB Coredump调试方法

最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统学习了一下&#xff0…

目标行动实现

最进看了本书。感觉有几个词,挺好的。愿景 执行 价值。做事要先看要不要做。在做,做完有价值。这是个朴实的道理。要实际践行啊。复杂的事情简单做,简单的事情重复做。这样好了。天人和1,转载于:https://www.cnblogs.com/wcLT/arc…

活久见啊,WPF工资已经这么高了!

金九银十高薪季,WPF招聘大厂多高薪多,阿里影视、百度地图、华为小米、小鹏特斯拉、美的碧桂园等都在招WPF人才,薪资30w起步,真心太牛了!为何WPF上位机自动化能异军突起?其实就是站在了IOT物联网的风口&…

oracle虚拟用户是什么意思,lr脚本中oracle 2tier虚拟用户相关内容

目的: 本文记录一些在使用oracle 2tier时了解的东西。以防止自己忘记 (一)如果选择录制脚本的话 1、vugen会生成以下这些跟其他协议不同的文件 vdf.h 作用:定义各种变量 print.inl 作用:打印表格使用的函数。录制脚本时才有用,写脚…

视图加载时自动执行铵钮事件

再学习一个方法,就是在ASP.NET MVC视图加载时,让jQuery自动执行一个铵钮事件。在控制器添加一个Action操作: 先在视图实现一个铵钮事件: 看看上面运行时的效果,当视图加载时,需要人为去点击铵钮&#xff0c…

硕博士的朋友圈都有哪些特点?

全世界只有3.14 % 的人关注了爆炸吧知识很多同学都会有这种感觉,读了硕士博士后,兴趣会突然间发生很大变化,发朋友圈也会不一样了。而真正决定人与人之间的差距的,其实是我们对事物的见识与内心的格局,见识的深浅决定人…

iphone UILabel 顶部对齐(top align)

通常UILabel如果设置了numberOfLines = 0,就会在父控件的中间显示,如何才能让其顶部对齐,通过一下的方式就能实现top align1、给myLabel标签内填充文本Label.text "文字内容;2、设置myLabel中希望的最大显示行数Label.numbe…

DataForm 中通过外面的按钮进行提交时,出错

并且有未提交的更改。调用 BeginEdit 后必须调用 EndEdit 或 CancelEdit 才能提交更改 解决方法: this.dataForm1.CommitEdit();转载于:https://www.cnblogs.com/Ken-Cai/archive/2012/05/29/2523954.html

python的缩进机制是其缺点之一_Python 的缩进是不是反人类的设计?

前些天,我写了《Python为什么使用缩进来划分代码块?》,文中详细梳理了 Python 采用缩进语法的 8 大原因。我极其喜欢这种简洁优雅的风格,所以对它赞美有加。然而文章发出去后,非常意外,竟收到了大量的反对意…

matlab作业1参考答案,matlab课后习题答案1到6章

rank(A); 范数:norm(A,1); 或 norm(A);或norm(A,inf);sumsumA(i);ax2 bx c, 0.5end x 1.5 BA(find(Ay asincb x, 1.5 x 3.5CB(find(rem(B,2)0));cdisp(C); lnb , 3.5 x 5.5条件数: cond(A,1); 或 cond(A,2); 或cond(A,inf)迹: trace(A);(2)【…

WPF 触屏事件后触发鼠标事件的问题及 DataGrid 误触问题

WPF 触屏事件后触发鼠标事件的问题及 DataGrid 误触问题目录一、触屏事件连带触发鼠标事件的问题二、DataGrid 误触问题及解决方法独立观察员 2021 年 10 月 10 日一、触屏事件连带触发鼠标事件的问题这个是 WPF 已知的问题,网络上也有一些讨论,但是没有…

Facebook应用Moments使用C++实现跨平台代码共享

据Facebook工程师Ashwin Bharambe、Zack Gomez及Will Ruben报道,作为Facebook最新应用之一的Moments正使用C实现跨iOS和Android平台共享业务逻辑。这里,我们将回顾一下Facebook工程师给出的选择C的理由和结果。\\对于Moments应用,为了“只关注…

ImportError: libpq.so.5: cannot open shared object file: No such file or directory

import psycopg2Traceback (most recent call last): File "<stdin>", line 1, in ? File "/usr/lib/python2.4/site-packages/psycopg2-2.4.1-py2.4-linux-x86_64.egg/psycopg2/__init__.py", line 71, in ? from psycopg2._psycopg import …

VS2008、VS2010中如何屏蔽讨厌的MSVCR*.dll的引用

VS系列工具作为目前微软主打的集成开发环境&#xff0c;在历经了近20多年的发展后&#xff0c;到如今已经可以说是Windows平台上各种IDE环境中的翘楚了。很多别的开发工具已经难望其项背了&#xff0c;如今VS2010也已经面市很长时间了&#xff0c;但是因为笔者囊中羞涩&#xf…

听说,99%的数学家都算不出这道题

全世界只有3.14 % 的人关注了爆炸吧知识著名的数学家毕达哥拉斯曾说&#xff1a;“朋友是你灵魂的倩影&#xff0c;要像220与284一样亲密。”就因为不经意的一句话&#xff0c;引发了一场数群和数学家长达几千年的“斗争”&#xff0c;甚至到现在依然没有结束&#xff01;无数个…

oracle账号区分大小写吗,实战Oracle 11g用户密码不区分大小写

连接到:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> show  parameter sec_case_sensitive_logonNAME TYPE VAL…