LINQ クエリでの Null 処理:「値の型 'Int32' に変換できません」エラーの解決
このコードは、LINQ クエリを使用して、特定のユーザー ID のクレジット履歴の合計金額を取得します。 CreditHistory テーブルにレコードがない場合、null 値が返されるため、エラーが発生します。
null 値を処理するようにクエリを書き換えます
このエラーは、Sum() メソッドが null 以外の値を予期しているにもかかわらず、クエリが null 値を返す可能性があるために発生します。この問題を解決するには、?? 演算子または DefaultIfEmpty() メソッドを使用して、null 許容型を受け入れるようにクエリを変更します。
?? 演算子を使用します
?? 演算子はデフォルト値を指定することで 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 プロパティを int? に変換して、null を指定できることを示します。次に、Sum() メソッドを使用して合計が計算され、int? が返されます。次に、結果が空の場合は、?? 演算子を使用してデフォルト値 0 を割り当てます。
DefaultIfEmpty() メソッドを使用します
また、DefaultIfEmpty() メソッドを使用して空の値を処理することもできます。
<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>
このメソッドは、Sum() 操作を実行する前に、シーケンスにデフォルト値 (0) を追加します。シーケンスに要素が含まれていない場合、合計の計算にはデフォルト値が使用されます。
以上が「値型 'Int32' へのキャストが失敗しました」エラーを回避するために LINQ Sum() で Null 値を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。