C# linq lambda 分组获取最新的数据

1、linq 写的不是很好总结一下

  ①、数据

 var id = Guid.Parse("04245059-9251-44e1-4c16-08d6be4a0add");
            Guid id2 = Guid.Parse("12385059-9251-44e1-4c16-08d6be4a0add");

            var time = DateTime.Now;
            var time2 = time.AddHours(5);
            List<list_data> list = new List<list_data>()
            {
                new list_data (){  id=id,name="1三",time=time,flag="sun" },
                new list_data (){  id=id,name="1四",time=time, flag="moon" },
                new list_data (){  id=id,name="1五",time=time, flag="star" },
                new list_data (){  id=id,name="1六",time=time.AddDays(1),flag="moon" },
                new list_data (){  id=id,name="1七",time=time.AddDays(1),flag="sun" },
                new list_data (){  id=id,name="1九",time=time.AddDays(1),flag="star" },
                new list_data (){  id=id2,name="2九",time=time2,flag="sun" },
                new list_data (){  id=id2,name="2四",time=time2, flag="moon" },
                new list_data (){  id=id2,name="2五",time=time2, flag="star" },
                new list_data (){  id=id2,name="2六",time=time2.AddDays(1),flag="moon" },
                new list_data (){  id=id2,name="2七",time=time2.AddDays(1),flag="sun" },
                new list_data (){  id=id2,name="2三",time=time2.AddDays(1),flag="star" }
            };

  ②、linq

  var query = list.AsQueryable();
            var data = from item in query
                       orderby item.time descending
                       group item by new { item.id ,item.time}
                       into g_data//根据id、time分成4组
                       group g_data by g_data.Key.id into last_data
                       select last_data;//根据id分成2组【1组里面又包含2组】获取第一组

  ③、lambda

  var lambda = query.OrderByDescending(p => p.time).GroupBy(g => new { g.id, g.time })
                      .GroupBy(g => g.Key.id).FirstOrDefault();

2、第二种

   var data2 = from item in query
                        group item by new { item.id, item.flag }
                        into g_data
                        select g_data.OrderByDescending(p => p.time).FirstOrDefault()//根据id、flag分成6组获取每组第一个【凑成一个组】
                        into datas group datas by datas.id//根据id分组分成两组
                        into  last_data select last_data;

原文地址:https://www.cnblogs.com/study10000/p/10764083.html

时间: 2024-10-07 21:01:25

C# linq lambda 分组获取最新的数据的相关文章

sql 分组取最新的数据sqlserver巧用row_number和partition by分组取top数据

SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单 分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系统中取出每个学科前3名的学生.这种查询在SQL Server 2005之前,写起来很繁琐,需要用到临时表关联查询才能取到.SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单.下面是一个简单示例: --1.创建测试

获取最新插入数据的ID(转)

SQL Server 2000中,insert数据的时候返回自动编号的id,有三种方法实现SCOPE_IDENTITY.IDENT_CURRENT 和 @@IDENTITY,它们都返回插入到 IDENTITY 列中的值. IDENT_CURRENT :返回为任何会话和任何作用域中的特定表最后生成的标识值.IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表.IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值. @@IDENTITY: 返回为当前会话的所有作用域

mysql根据某个字段分组根据更新时间获取最新的记录

我现在有一种统计表,要根据一个字段分组然后根据更新时间,每个分组获取最新的一条记录.命名感觉挺简单的一个需求,然而没什么思路,当然是问度娘了. 度娘的答案很统一,然而都不管用,都是报错的,不知道是不是因为mysql5.7的原因,不过我记得group by也是不能查出整条记录的,为什么百度上都可以,百思不得解! 从网上找个例子: 根据USER_ID分组,每个获取 last_updated_date最新的一条记录. SELECT ID,USER_ID,problems,last_updated_da

linq中分组查询而且获取每个分组中的第一条记录,数据用于分页绑定

LINQ分组取出第一条数据 Person1: Id=1, Name="Test1" Person2: Id=1, Name="Test1" Person3: Id=2, Name="Test2" 以上list如果直接使用distinct方法进行过滤,仍然返回3条数据,而需要的结果是2条数据.下面给出解这个问题的方法: 方法1: Distinct 方法中使用的相等比较器.这个比较器需要重写Equals和GetHashCode方法,个人不推荐,感觉较

Dev GridView 获取选中分组下的所有数据行 z

现在要在DevExpress 的GridView 中实现这样一个功能.就是判断当前的选中行是否是分组行,如果是的话就要获取该分组下的所有数据信息. 如下图(当选中红框中的分组行事.程序要获取该分组下的所有数据) 实现代码如下: List<int> _gridViewRowIndexs = new List<int>(); //存储GridView 中选中的行索引 private void Test() { int[] rows = gridView1.GetSelectedRows

还在为数据库不能获取最新数据而犯愁?信我,你只是需要一个或者的数据库——Realm

写在前面: 又到一年一度七夕虐狗节,看着大家忍受着各种朋友圈和QQ空间还有现实生活中的轮番轰炸,我实在不忍心再在这里给大家补刀,所以我觉得今天不虐狗,继续给大家分享有用的. 如果你比较关心android开发的最新动态的话,我想你一定知道android数据库新王者,没错,就是这个东西——Realm. 在安卓开发中,我们有sharedPreference和文件操作,当然还有一直为之自豪的轻量级数据库sqlite. SharedPreference其实是采用xml的方式,以键值对形式存储基本数据类型的

VBS脚本获取最新数据备份及重名数据文件

我们前面提到了,近期公司一直对OA系统上线忙前忙后,所以对于运维的我来说需要借助一些脚本工具替我分担解忧,现在遇到的问题是,我们需要将从真实环境上定时备份的SQL数据库数据拷贝到测试环境中,然后还原数据库,由于还原数据库我们使用SQL自带的脚本程序就可以完成,但是在完成的过程中,我们需要对还原的数据库名称做统一,因为我们都知道数据库通过计划任务备份后都是以日期命名的,所以我们在用脚本自动还原的时候不太方便,毕竟不怎么人性化,所以我们就想到的是,将最新备份的SQL数据文件通过VBS脚本拷贝到本地后

使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)

原文:使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置) 在上一篇中说到了Silverlight下的Socket通信,在最后的时候说到本篇将会结合地图.下面就来看看本文实现的功能: Silverlight 与服务器利用Socket通讯,实时从服务器获取数据(本文中的数据是地理坐标),由于没有GPS,所以本文在服务器写了一个构造新坐标的函数(本文是一个三角函数),然后利用Timer组件,实时调用,得到新的坐标,并将新的坐标发送给客户端,客户端接收到发

ASP.NET EF(LINQ/Lambda查询)

EF(EntityFrameWork) ORM(对象关系映射框架/数据持久化框架),根据实体对象操作数据表中数据的一种面向对象的操作框架,底层也是调用ADO.NET ASP.NET MVC 项目会自动导入MVC程序集,因为默认.NET环境(GAC)中没有这个程序集 1 create database MyFirstEF 2 on primary 3 ( 4 name='MyFirstEF.mdf', 5 --修改为自己电脑上SQL DB路径 6 filename='E:\ProgramMSSQL