У меня есть таблица SQLite, которая содержит каждый результат теста, который мы запустили, и я пытаюсь написать запрос структуры сущностей, который возвращает только самый последний результат теста для проекта.
Обычно, я бы предположил, что это будет «группировка по идентификатору проекта, возвращаемая строка с максимальным обновленным значением» или, альтернативно, «сортировка по дате и возврат в первую очередь». Однако, когда я пытаюсь выполнить запрос, я получаю ошибки Entity Framework, которые «не могут быть переведены».
Вот что я пробовал:
results = await _context.Results
.Include(x => x.Project)
.AsNoTracking()
.OrderByDescending(x => x.Updated)
.GroupBy(x => x.ProjectId, (x, y) => y.First())
.ToListAsync();
Однако я продолжаю получать сообщения о том, что команда .First()
не может быть переведена Entity Framework. Есть ли что-то, что я упускаю (или, альтернативно, лучший способ написания запроса, который более дружествен к фреймворку сущностей)?
Для справки, вот операция, которую я пытаюсь выполнить в обычном режиме SQL : https://thoughtbot.com/blog/ordering-within-a-sql-group-by-clause
Я бы предпочел сделать как можно больше работы на сервере, потому что проектов мало, но результатов может быть тысячи и я бы предпочел не делать фильтрацию на стороне клиента, если это возможно.
Приложение написано для ASP. NET Core 3.1, с использованием Entity Framework Core.
Незначительное редактирование: пока SQLite используется для разработки, окончательный код будет работать с SQL Сервером, отсюда и желание выполнять обработку на стороне сервера.