EFCore Linq: выбрать только записи с максимальным значением столбца - PullRequest
0 голосов
/ 26 апреля 2019

Я использую Entity Framework Core (лямбда-синтаксис).Это кажется таким легким делом, но по какой-то причине ускользает от меня.

Допустим, у меня есть простая таблица, подобная этой:

Run  Result
1    result1
1    result2
2    result3
2    result4    

Все, что я хочу сделать, это захватить строки с максимальным значением прогона.

Таким образом, результат должен быть:

2    result3
2    result4

В основном сгруппировать по прогону и получить группу с максимальным значением прогона и вернуть все строки.Может быть, я думаю об этом не так?

1 Ответ

1 голос
/ 26 апреля 2019

Группировка по не будет работать (без естественного перевода SQL).

Однако подойдет какое-то самостоятельное объединение.

Например,

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

т.е. взять записи с max Run (см. Как перевести этоSQL-запрос к LINQ-запросу в EF Core? , для чего необходимо преобразование в Nullable)

или

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

, т.е. принимать записи, в которых нет записи с большим Run.

...