LINQ分组:选择行而不是密钥?
问题描述:
我可能就无法解释这个还不错,但这里有云......LINQ分组:选择行而不是密钥?
我有一个类似的表:
Id | Foreign_Key_Id | A_Number | Some_Other_Info
1 1 100 Red
2 1 200 Blue
3 1 300 Orange
4 2 100 Green
5 2 200 Yellow
6 3 100 Brown
我想要得到的最大“A_Number”对于此表中的特定“Foreign_Key_Id”,还要返回记录的其余部分,以便从“Some_Other_Info”列中获取信息。
我发现我可以通过这样的查询做到这一点:虽然我不能肯定它记录
from x in This_Table
group x by x.Foreign_Key_Id into g
let maxANumber = g.Max(x => x.A_Number)
orderby maxANumber descending
select g.Where(x => x.A_Number == maxANumber).First()
:
from x in This_Table
group x by x.Foreign_Key_Id into g
orderby g.Max(x => x.A_Number) descending
select g.Where (x => x.Foreign_Key_Id == g.Key).OrderByDescending (x => x.A_Number).First()
编辑:或者,也许这更简洁查询如果一个Foreign_Key_Id具有两个具有相同“A_Number”值的记录(这在我所指的表中是可能的,那么我只需要取最近的一个)。
我相信这在我的例子将返回:
Id | Foreign_Key_Id | A_Number | Some_Other_Info
3 1 300 Orange
5 2 200 Yellow
6 3 100 Brown
好像必须有一种方式,更简单的方式来做到这一点(这使得比我想出了一个更快的查询),我只是无法弄清楚如何。
在此先感谢。
答
以下也有效。您可以订购组内:
from x in This_Table
group x by x.Foreign_Key_Id into g
select g.OrderByDescending(y => y.A_Number).First();
拍摄时A_Number
s为等于最近的记录是为增加另一个OrderBy
到查询一样简单。
谢谢。比我丑陋的解决方案更简洁。 – Ocelot20 2010-07-26 14:28:46