查找每个键的最大值行

时间:2013-02-07 19:43:46

标签: c# sql-server linq entity-framework

我有一个存储在SQL Server中的表,我希望使用LINQ进行查询。对表格的模糊描述:

  ID1  |  ID2  |  SomeData
-----------------------------
   1   |   1   |  'Moo'
   1   |   2   |  'Meow'
   1   |   3   |  'Woof'
   1   |   4   |  'Cheap'
   2   |   1   |  'Quack'
   2   |   2   |  'Grrrrr'
   2   |   3   |  'Wan wan'

我只对ID2每个ID1最大值的行感兴趣。示例所需结果:

   1   |   4   |  'Cheap'
   2   |   3   |  'Wan wan'

我提出了这个SQL代码:

SELECT *
FROM SomeTable a
INNER JOIN
(
    SELECT ID1, MAX(ID2) as SomeName
    FROM SomeTable
    GROUP BY ID1
) as b
ON a.ID1 = b.ID1 and a.ID2 = b.SomeName

在LINQ中实现时,是否还需要子查询?也就是说,查询数据库并使用“内部查询”结果加载变量,然后查询同一个表但是与“内部查询”中的值进行比较?我知道如果我修补一段时间,我最终会得到它,但我觉得可能有一些奇特的方法可以很容易地在LINQ中做到这一点。

所需答案将使用扩展方法语法。

Bonus:扩展方法语法转换器是否有任何类型的标准LINQ语法?你们用什么工具来玩LINQ语句?对于我来说,使用整个c#(ASP.NET MVC对我来说)来使用LINQ查询似乎有点麻烦。

1 个答案:

答案 0 :(得分:12)

直截了当的方式:

var result = db.SomeTable.GroupBy(x => x.ID).Select(g => g.OrderByDescending(x => x.ID2).First());

不完全确定这会转换为有效的SQL效果,所以如果这很重要,请使用您最喜欢的探查器进行检查!