[解決済み] マテリアライズされた値が NULL であるため、値型 'Int32' へのキャストに失敗しました。
2022-04-12 05:50:07
質問
次のようなコードがあります。エラーが発生します。
実体化された値が NULL であるため、値型 'Int32' へのキャストに失敗しました。結果型の汎用パラメータまたはクエリが null 可能な型を使用する必要があります。
CreditHistory テーブルにレコードがない場合。
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();
ヌル値を受け入れるようにクエリを変更するにはどうすればよいですか?
どのように解決するのですか?
linq-to-sqlクエリは、コードとして実行されるのではなく、SQLに変換されます。時には、これは予期せぬ振る舞いをもたらす、quot;リーキー・アブストラクション(leaky abstraction")です。
そのひとつがNULLの処理で、予期しないNULLがさまざまな場所に存在することがあります。
...DefaultIfEmpty(0).Sum(0)
はこの(非常に単純な)ケースで役に立ちます。
SUM
は
null
c#は0を期待するのに対し
より一般的な方法として
??
に翻訳されます。
COALESCE
生成されたSQLが予期せぬNULLを返す危険性がある場合は、いつでもそうします。
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;
これは、最初に
int?
を返すことができることをC#コンパイラに伝えます。
null
であるにもかかわらず
Sum()
は
int
. 次に、通常の
??
演算子で処理します。
null
の場合です。
この回答を元に、私が書いた ブログ記事 LINQ to SQLとLINQ to Entitiesの両方についての詳細が書かれています。
関連
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】「namespace」なのに「type」のように使われる。