Наибольший запрос для каждой группы, который переводит на оценку сервера в ef core 2.1 - PullRequest
0 голосов
/ 12 октября 2018

У меня есть таблица SQL Items с макетом

Code | UpdatedAt  | data columns...
------------------------
0001 | 2017-01-01 | ..
0001 | 2017-01-02 | ..
0002 | 2017-01-01 | ..
0003 | 2017-01-01 | ..

и я хочу выбрать все Items с последним значением UpdatedAt в ef core 2.1

для Item с кодом code, следующее работает и переводится в один запрос SQL:

var latestItemVersion = await DbContext.Items.Where(p => p.Code == code).OrderByDescending(p => p.UpdatedAt).FirstOrDefaultAsync()

, но для списка всех последних Items:

var latestItemVersions = await DbContext.Items.GroupBy(p => p.Code).Select(g => g.OrderByDescending(p => p.UpdatedAt).First()).ToListAsync()

возвращает правильные результаты, но приводит к запросу типа SELECT * from [Items] ORDER BY [code] и группирует результаты локально.

EF регистрирует предупреждения:

The LINQ expression 'GroupBy([p].Code, ... could not be translated and will be evaluated locally.
The LINQ expression 'orderby [p].UpdatedAt desc' could not be translated and will be evaluated locally.
The LINQ expression 'First()' could not be translated and will be evaluated locally.

Как превратить это во что-то, что преобразуется в один SQL-запрос?Возможно ли это?

...