LINQ クエリでの Null 値の処理: 型変換エラーの解決
LINQ クエリが null 値を返す場合、「値の型 'Int32' を null に変換できません。これを解決するには、結果の型またはクエリのジェネリック パラメーターは null 許容型を使用する必要があります。」というエラーがスローされることがあります。エラーが発生し、null 値が許可される場合は、次のアプローチを検討してください:
方法 1: DefaultIfEmpty と Sum を使用し、デフォルト値を指定します
<code class="language-csharp">var creditsSum = (from u in context.User join ch in context.CreditHistory on u.ID equals ch.UserID where u.ID == userID select ch.Amount).DefaultIfEmpty(0).Sum();</code>
このメソッドは、DefaultIfEmpty
テーブルに一致するレコードがない場合に、CreditHistory
を使用してデフォルト値 (この場合は 0) を挿入します。
方法 2: null 許容型に変換し、?? 演算子を使用する
<code class="language-csharp">var creditsSum = (from u in context.User join ch in context.CreditHistory on u.ID equals ch.UserID where u.ID == userID select (int?)ch.Amount).Sum() ?? 0;</code>
このメソッドでは、Amount
属性を null 許容型 (int?
) に変換するようにクエリが変更されます。これにより、値が null である可能性があることがコンパイラに通知されます。次に、??
演算子を使用して null 値の場合を処理し、値が null の場合はデフォルト値 (この場合は 0) を割り当てます。
方法 3: Coalesce 機能を使用する
<code class="language-csharp">var creditsSum = (from u in context.User join ch in context.CreditHistory on u.ID equals ch.UserID where u.ID == userID select COALESCE(ch.Amount, 0)).Sum();</code>
このメソッドは、COALESCE
関数を使用して、SQL クエリ内で null 値を指定されたデフォルト値 (この場合は 0) に直接置き換えます。
以上がキャストの失敗を避けるために、LINQ クエリで Null 値を処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。