查找每个键的最大值行

Jef*_*eff 5 c# linq sql-server 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'
Run Code Online (Sandbox Code Playgroud)

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

   1   |   4   |  'Cheap'
   2   |   3   |  'Wan wan'
Run Code Online (Sandbox Code Playgroud)

我想出了这个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
Run Code Online (Sandbox Code Playgroud)

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

期望的答案将使用扩展方法语法.

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

dri*_*iis 12

直截了当的方式:

var result = db.SomeTable.GroupBy(x => x.ID).Select(g => g.OrderByDescending(x => x.ID2).First());
Run Code Online (Sandbox Code Playgroud)

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