В настоящее время проводится тестирование с EF Core версии 3.1.1.
При поиске я нахожу ссылки на эту проблему, но не вижу однозначных ответов о том, почему это происходит, и является ли это ошибкой. это будет исправлено или, если это ожидаемое поведение. Это так же просто, как выглядит - таблица / сущность BatchRequest имеет целочисленный столбец / свойство с именем BatchId:
var batchRequestGroups = context.BatchRequests.GroupBy(br => br.BatchId).ToList();
Когда я запускаю это, я получаю исключение System.InvalidOperationException, "GroupBy на стороне клиента не поддерживается. "
Итак, исходя из объяснений, которые я нахожу в Интернете, похоже, что EF Core 3.x больше не будет разрешать GroupBys на стороне клиента, кроме как в проекции верхнего уровня.
С https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/breaking-changes#linq -запросы, которые больше не оцениваются на клиенте :
Старое поведение
До версии 3.0, когда EF Core не мог преобразовать выражение, являющееся частью запроса, в SQL или параметр, он автоматически оценивал выражение на клиенте. По умолчанию клиентская оценка потенциально дорогих выражений только выдает предупреждение.
Новое поведение
Начиная с версии 3.0, EF Core допускает только выражения в проекции верхнего уровня ( последний вызов Select () в запросе) для оценки на клиенте. Если выражения в любой другой части запроса не могут быть преобразованы в SQL или в параметр, возникает исключение.
Означает ли это, что в предыдущих версиях ALL Предложения GroupBy были оценены на клиенте?
Кроме того, почему GroupBy в моем примере не может быть оценен в SQL? И как GroupBy моего примера не является проекцией верхнего уровня?
Опять же, мой главный вопрос: это ошибка или ожидаемое поведение?