LINQ クエリでの null 値の処理: 「Int32 に変換できません」エラーの解決
LINQ クエリで「実体化された値が null であるため、値の型 'Int32' に変換できません」エラーが発生した場合、これは、予期される非 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 ch.Amount).Sum();</code>
質問:
このクエリは、特定の userID を持つユーザーの ch.Amount の合計を取得します。ただし、CreditHistory テーブルにそのユーザーのレコードがない場合、クエリはデータベース結果の null 値を Int32 に変換しようとし、エラーが発生します。
解決策:
null 値に対応するための解決策には、null 許容型の導入と null ケースの適切な処理が含まれます。
null 許容型を使用します:
まず、select 句の式を int? などの 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();</code>
null 合体演算子 (??) を使用します:
次に、?? 演算子を使用して null の場合を処理します。式が空かどうかをチェックし、デフォルト値 (この場合は 0) を返します:
<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>
これらの変更を組み込むことで、クエリは null 値を適切に処理し、適切な結果を返し、変換エラーを防ぐことができます。
以上がNull 値を含む LINQ クエリの「Int32 へのキャストに失敗しました」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。