ホームページ >バックエンド開発 >C++ >「値型 'Int32' へのキャストが失敗しました」エラーを回避するために LINQ Sum() で Null 値を処理する方法

「値型 'Int32' へのキャストが失敗しました」エラーを回避するために LINQ Sum() で Null 値を処理する方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-10 20:52:41318ブラウズ

How to Handle Null Values in LINQ Sum() to Avoid

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。