1. ホーム
  2. c#

[解決済み] クライアント側のGroupByがサポートされていない

2023-04-28 19:04:48

質問

次のEntity Framework Core 3.0クエリを持っています。

var units = await context.Units
  .SelectMany(y => y.UnitsI18N)
  .OrderBy(y => y.Name)
  .GroupBy(y => y.LanguageCode)
  .ToDictionaryAsync(y => y.Key, y => y.Select(z => z.Name));

以下のようなエラーが出ます。

Client side GroupBy is not supported.

クライアント、またはその一部でクエリを実行するには、次のようにします。

var units = context.Units
  .SelectMany(y => y.UnitsI18N)
  .OrderBy(y => y.Name)
  .AsEnumerable()
  .GroupBy(y => y.LanguageCode)
  .ToDictionary(y => y.Key, y => y.Select(z => z.Name));

これで動作するようになりました。

クライアントでクエリを実行していないのに、なぜこのようなエラーが発生するのでしょうか。

どのように解決するのですか?

あなたの .GroupBy(y => y.LanguageCode).ToDictionaryAsync(y => y.Key, y => y.Select(z => z.Name)); はSQLに変換することができません。 EF Core 3.0は例外をスローして Units のすべてのレコードがグループ化される前にデータベースから取得され、Dictionaryにマップされることを確認するために例外がスローされます。

EF Core 3.0のトップブレークニングの変更です。 https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/breaking-changes