5

我有一个存储在 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 中可能有一些奇特的方法可以很容易地做到这一点。

期望的答案将利用扩展方法语法。

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

4

1 回答 1

12

直截了当的方法:

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

不完全确定这转化为 SQL 的效率有多高,所以如果这很重要,请使用您最喜欢的分析器进行检查!

于 2013-02-07T19:56:56.063 回答