我有一个存储在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查询似乎有点麻烦。
答案 0 :(得分:12)
直截了当的方式:
var result = db.SomeTable.GroupBy(x => x.ID).Select(g => g.OrderByDescending(x => x.ID2).First());
不完全确定这会转换为有效的SQL效果,所以如果这很重要,请使用您最喜欢的探查器进行检查!