ホームページ >バックエンド開発 >C++ >Null 値を含む LINQ クエリの「Int32 へのキャストに失敗しました」エラーを解決するにはどうすればよいですか?

Null 値を含む LINQ クエリの「Int32 へのキャストに失敗しました」エラーを解決するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-10 20:41:45602ブラウズ

How to Resolve

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

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