提问人:Rob Lao 提问时间:11/15/2023 更新时间:11/15/2023 访问量:49
有没有更好的方法通过使用 LINQ 获取计算组的整行
Is there a better way to get full row of calculated group by using LINQ
问:
这个问题是ttps://stackoverflow.com/questions/157786/how-do-i-get-the-max-row-with-a-group-by-in-linq-query 的另一个问题。除了最大值和组键之外,我还需要行的每一列(包括最重要的一列:ID)。
例如,给定的 students 表
编号 | 名字 | 类 | 得分 |
---|---|---|---|
1 | N0型 | C0型 | 0 |
2 | N1型 | C0型 | 1 |
3 | N2型 | C1型 | 1 |
4 | N3型 | C1型 | 2 |
5 | N4型 | C1型 | 3 |
6 | N5型 | C2型 | 4 |
7 | N6型 | C2型 | 5 |
为了让整排得分最高的学生按班级分组,我想出了一种方法,但对它的简单性不满意:
from o in Students
join o1 in
(from oo in Students
group oo by oo.Class
into g
select new { Class = g.Key, MaxScore = g.Max(x => x.Score)})
on o.Class + o.Score equals o1.Class + o1.MaxScore
select o
我的问题是:有没有更简单的方法是使用 LINQ 或原始 MSSQL 来实现上述目标?
答:
1赞
Charlieface
11/15/2023
#1
您可以执行一些操作,例如从分组中进行选择,这应该使用窗口函数
from o in Students
group o by o.Class into g
from s in g
where s.Score == g.Max(x => x.Score)
select s;
另一种选择,它不会给出平局的结果
from o in Students
group o by o.Class into g
select g.OrderByDescending(x => x.Score).First();
0赞
Dewald Oosthuizen
11/15/2023
#2
您也可以将其拆分为:
- 按班级对学生进行分组,并找到每个班级的最高分。
- 加入在各自班级中获得最高分的原始学生名单。
评论