...しかし、それはnullではありません。
参考までに - このエラーには多くのスレッドが存在しますが、匿名型を使用しているものはありません。
Linq クエリで奇妙な InvalidOperationException を取得しています。
メッセージ: 「実体化された値が null であるため、値の型 'Int32' へのキャストは失敗しました。結果の型のジェネリック パラメーターまたはクエリは、null 許容型を使用する必要があります。」
紛らわしいのは、匿名型を作成するときにエラーが発生することです。
var workstepid = 484,449;
var wsData = ion.xWorkSteps
.Where(w => w.WorkStepId == workstepId)
.Select(w => new
{
w.WorkStepId,
w.ServiceId,
w.Service.TitleId,
w.Service.Title.OrderId,
w.Service.Title.AltTitleId
}).SingleOrDefault();
LinqPad では、この特定のクエリは問題なく実行され、使用される workstepId は匿名型の各プロパティの整数値を返します。では、どのプロパティにも null 値がないのに、なぜキャスト エラーが発生するのでしょうか!?
参考までに、最後のプロパティ AltTitleId は null 許容の int であり、他のプロパティは int です。また、このコードは数週間前に書かれたもので、今日までこのエラーは発生しませんでした。私のEFで何かファンキーですか?
編集:解決済み
データベースでソフト削除を使用し、削除されたレコードを Active=0 に設定します。非アクティブなレコードを除外する edmx テーブルの EF にプロパティ セットがあることがわかります (Active=1 のフィルター)。当然、これは Linqpad には影響せず、期待される結果が得られますが、これはテストしていた古いレコードであるため、タイトル レコード (Service.Title) は Active=0 とマークされていたため、null を返していました。
助けてくれてありがとう。