LINQ クエリでの null 値の処理: 「変換に失敗しました」エラーの解決
LINQ クエリを実行すると、開発者は「具体化された値が null であるため、値の型 'Int32' に変換できません。」というエラーが発生する場合があります。この問題は、null を許可する値を null を許可しない値の型に変換しようとすると発生します。 。
次の LINQ クエリは、この状況を示しています。
<code>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>
このクエリは、CreditHistory テーブル内の特定の userID の Amount 列の合計を計算します。ただし、CreditHistory テーブルに指定されたユーザーのレコードがない場合、ch.Amount 式は null を返します。この null 値は null 非許容値型 Int32 に変換できないため、エラーが発生します。
解決策: null 値の処理
LINQ クエリで null 許容値を処理するには、次の 2 つのアプローチが考えられます。
<code>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>
<code>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>
このバージョンでは、式 (int?)ch.Amount は値を明示的に int? に変換し、null であってもよいことを示します。後続の ?? 演算子は、NULL 値をデフォルト値の 0 に置き換えます。
これら 2 つのメソッドのいずれかを実装することで、クエリは null 値を正常に処理し、目的の結果を返すことができます。
以上がLINQ で Null 許容整数を合計するときに「キャスト失敗」エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。