linq和ef关于group by取最大值的两种写法

LINQ:

var temp = from p in db.jj_Credentials
                       group p by p.ProfessionID into g
                       select new
                       {
                           g.Key,
                           MaxPrice = g.Max(p => p.CredentialsRankID)
                       };

EF:

var temp1 = db.jj_Credentials.GroupBy(m => m.ProfessionID).Select(m => m.Max(o => o.CredentialsRankID));
            foreach(var p in temp1)
            {
                Response.Write(p);
            }

补充:取最大值后取得当前完整记录的方法,两种写法:

写法1

//写法1
            var list1 = db.jj_Credentials.Where(m => m.UserId == UserContext.UserID && m.IsAudit).OrderByDescending(m => m.CredentialsRankID).ToList().GroupBy(x => x.ProfessionID)
                .SelectMany(t => t.Select((b, i) => new { b, i }).Where(m => m.i == 0)).Select(m => m.b);

            foreach (var i in list1)
            {
                Response.Write(string.Format("{0} {1} {2} {3}<br>", i.CredentialsID, i.UserId, i.CredentialsRankID, i.ProfessionID));
            }

写法2

//写法2
            var list = db.jj_Credentials.Where(m => m.UserId == UserContext.UserID && m.IsAudit).OrderByDescending(x => x.CredentialsRankID).ToList().GroupBy(x => x.ProfessionID)
            .Select(g => new { g, count = g.Count() })
            .SelectMany(t => t.g.Select(b => b).Zip(Enumerable.Range(1, t.count), (j, i) =>
                new
                {
                    CredentialsID = j.CredentialsID,
                    UserID = j.UserId,
                    CredentialsRankID = j.CredentialsRankID,
                    ProfessionID = j.ProfessionID,
                    rn = i
                }).Where(x => x.rn == 1));

            //打印
            foreach (var i in list)
            {
                Response.Write(string.Format("{0} {1} {2} {3}<br>", i.CredentialsID, i.UserID, i.CredentialsRankID, i.ProfessionID));
            }

转载 https://www.cnblogs.com/yechangzhong-826217795/p/7737450.html

原文地址:https://www.cnblogs.com/xxjs/p/12069345.html

时间: 2024-10-11 02:43:32

linq和ef关于group by取最大值的两种写法的相关文章

选中没有选中的复选框,匹配含有某个字符串的正则,json取值的两种方法,把变量定义在外面跟里面的区别

一.筛选没有选中的复选框:not("input:checked") 二.匹配有VARCHAR的字符串:".*VARCHAR.*?" 三.json取值的两种方法 var data={ "show_in_list": 1, "enums": [ { "value": "B2B", "key": "1" }, { "value": &

在List中找出最大值的两种方法

先说需求:找出一个对象List中,某个属性值最大的对象. 1.定义对象 1 private class A 2 { 3 public int ID { get; set; } 4 5 public string Name { get; set; } 6 } 2.为两种方法定义两个时间段全局变量. 1 private static TimeSpan compare = new TimeSpan(); 2 private static TimeSpan order = new TimeSpan();

找出数据集合中的最小值和最大值的两种算法比较

最小值和最大值 -- 算导笔记 实现太过于简单以至于算导里面都不讲代码实现,只是简单介绍了理论. 通常寻找最大值最小值的方法 方法一: void max_min(int* array,int size,int* max) { int tmp = 0; for(tmp = 0,*max = array[0];tmp < size;tmp++) { *max = *max > array[tmp] ? *max : array[tmp]; } } 这里如果寻找最小值同理 可以发现如果同时要求找到最

mysql 分组总和求最大值 的两种方式

SELECT max(pp.totalPrice) FROM ( SELECT sum(oi.product_price) totalPrice FROM `order.item` oi GROUP BY oi.id ) as pp SELECT oi.id, oi. sum(oi.product_price) AS pp FROM `order.item` oi GROUP BY oi.id order by pp desc limit 1 版权声明:本文为博主原创文章,未经博主允许不得转载.

js对象取值的两种方式

var obj = {abc:"ss",nn:90}; var v1 = obj.abc;//使用点的方式 var v2 = obj["abc"];//使用中括号的方式 在实际项目中一般使用点,会方便许多,但是如果key是变量的话就不能使用点了,js会理解变量为对象的key值,造成混淆 1 var v3 = obj[key];//key是一个变量

pyhon-----获取ip的两种方法

方法一: 通常使用socket.gethostbyname()方法即可获取本机IP地址,但有时候获取不到(比如没有正确设置主机名称),示例代码如下: import socket # 获取本机计算机名称 hostname = socket.gethostname() # 获取本机ip ip = socket.gethostbyname(hostname) print(ip) 亲测:如果使用手机时,地址为127.0.0.1,如果使用电脑(windows)无线连接时,地址为外网地址. 方法二: 在wi

应用开发之Linq和EF

上一章笔者对于WinForm开发过程用到的几个知识点做了讲解.笔者们可以以此为开端进行学习.而本章我们来讲一个跟ORM思想有关的知识点.在讲之前让我们想一下关于JAVA的hibernate知识点.hibernate也是ORM框架.记得hibernate里面有一个叫HQL.先不管HQL的好与坏.主要是明白HQL的目地是什么.ORM的思想就是为了让用户在操作数据的时候用上面向对象的思想来看,而不是二维数据了.所以HQL笔者认为就是一个面向对象思想的SQL语句.那么为什么笔者要讲到HQL呢?事实上笔者

Java进击C#——应用开发之Linq和EF

本章简言 上一章笔者对于WinForm开发过程用到的几个知识点做了讲解.笔者们可以以此为开端进行学习.而本章我们来讲一个跟ORM思想有关的知识点.在讲之前让我们想一下关于JAVA的hibernate知识点.hibernate也是ORM框架.记得hibernate里面有一个叫HQL.先不管HQL的好与坏.主要是明白HQL的目地是什么.ORM的思想就是为了让用户在操作数据的时候用上面向对象的思想来看,而不是二维数据了.所以HQL笔者认为就是一个面向对象思想的SQL语句.那么为什么笔者要讲到HQL呢?

SQL数据分组后取最大值或者取前几个值(按照某一列排序)

今日做项目的时候,项目中遇到需要将数据分组后,分组中的最大值,想了想,不知道怎么做,于是网上查了查,终于找到了思路,经过比较这个查询时目前用时最快的,其实还有别的方法,但是我觉得我们只掌握最快的方法就行 ,好了,不说废话了! 直接上内容吧:以下数据是通过 SELECT [CustomerCaseNo],[PaymentsTime] FROM [BOMSDatabase].[dbo].[BAL_paymentsSwiftInfo] where StoresNo='zq00000034' group