VB.Net にはいくつかのプロジェクトがあり、SQL クエリの多くに .Net Framework 4 と Linq to Entities を使用しています。EF への移行は私たちにとって新しいシフトであり (約 4 ~ 6 か月間使用しています)、コーディングを大幅に高速化できるため、上層部の支持を得ています。私たちはまだ多くのストアド プロシージャを使用していますが、Linq to Entities を介してそれらを実行することさえあります。
混乱を解消したいと思っていますが、意味のある直接的な答えが見つかりません。特定のフィールドに NULL 値を持つレコードが必要なクエリがいくつかあります。これらは単純な選択クエリであり、集計や左結合などはありません。Microsoft は、次のMSDN リンクのようなクエリを推奨しています。
dim query = from a in MyContext.MyTables
Where a.MyField = Nothing
Select a
私はこれを正確に行ういくつかのプロジェクトを持っていますが、IDE で警告はなく、うまく機能します。最近、新しいプロジェクトが別の開発者によって作成され、彼が上記のように null チェックを行ったときに、IDE で次の警告が表示されます。
警告 1 この式は常に Nothing と評価されます (equals 演算子からの null 伝搬のため)。値が null かどうかを確認するには、'Is Nothing' の使用を検討してください。
プロジェクトを比較すると、それぞれにオプション explicit とオプション strict がオンになっています。警告を無視すると、アプリの実行時に探している正確なレコード セットが取得されます。= 記号を IS に変更すると、警告が消えます。しかし、なぜこの警告が 1 つのプロジェクトで表示され、他のプロジェクトでは表示されなかったのでしょうか? MSDN でも等号演算子を使用した例があると混乱します。