EFCore Linq:仅选择具有列最大值的记录

时间:2019-04-26 00:00:13

标签: c# entity-framework-core linq-to-entities

我正在使用Entity Framework Core(lambda语法)。这似乎很容易做到,但是出于某种原因却使我难以理解。

让我们说一个简单的表格是这样的:

Run  Result
1    result1
1    result2
2    result3
2    result4    

我要做的就是获取具有最大运行值的行。

所以结果应该是:

2    result3
2    result4

基本上按运行分组,并获得具有最大运行值的分组,然后返回所有行。也许我在想这是错误的方式?

1 个答案:

答案 0 :(得分:1)

分组依据不起作用(无自然SQL翻译)。

不过,某种形式的自我加入会起作用。

例如

db.Runs.Where(e => e.Run == db.Runs.Max(e2 => (int?)e2.Run))

即记录最大为Run的记录(有关为何需要可空强制转换的信息,请参见How to translate this SQL query to a LINQ query in EF Core?

db.Runs.Where(e => !db.Runs.Any(e2 => e2.Run > e.Run))

即记录没有Run更大的记录。