質問: 私は次のコードを実行しようとしました: ``` await _dbContext.Customers.Select(x => x.CustomerNr).DefaultIfEmpty(0).MaxAsync() + 1; ``` 基本的に、データベースから最大の顧客番号を取得し、それに1を加える必要があります。顧客テーブルが空の場合は、0が返され、1が追加されます。なぜ次の例外が発生するのですか。 ![Linqエラーメッセージ](https://i.stack.imgur.com/7vlvg.png) **編集:** .NET Core 3.1とEF Core 3.0.1を使用しています(EF Core 3.1.0でも同じエラー)
回答: デフォルト値での`DefaultIfEmpty`オーバーロードは避けてください`DefaultIfEmpty`クエリ`DefaultIfEmpty`はサポートされていません。 また、一般に、左外部結合パターン以外の`DefaultIfEmpty`パラメータなしのオーバーロードは避けてください。サポートされているものの、SQL変換は非常に奇妙です。 空のセットに`Max`メソッド、 `Min`メソッド、 `Average`メソッドを適用する問題を解決するには、空のセットに対して`null`を返す`null`可能なオーバーロードを使用し、必要に応じて`null`結果を0(または他の望ましいマジック値)に変換し`null` 。 これをシナリオに適用すると、次のようになります( `CustomerNr`タイプが`int`想定)。 ``` (await _dbContext.Customers.MaxAsync(x => (int?)x.CustomerNr)) ?? 0 + 1; ```