Nullable object must have a value
今日、このコード行でエラーが発生しました。
list = From x In Me Where x.FooDate.HasValue AndAlso x.FooDate.Value.Date >= barDate
面白いことに、これは以前は正常に機能していたと思います(そして、基になるデータには常にnull値が散在しています)。そして論理的にはそれは私にはうまく見えます。ヌルの危険から私たちを守ってくれるかのようにチェックしHasValue
てAndAlso
見てください。
しかし、突然そうではないようです。私は何かが足りないのですか?
OK、これに修正できます。これにより、エラーがなくなります。
list = From x In Me Where If(x.FooDate.HasValue, x.FooDate.Value.Date >= barDate,False)
しかし、これは私には読みにくいように見えます。何かご意見は?
更新...と告白:
上記のコードを単純化して行を短くする際に、コードの重要なチャンクを省略しました。元の問題は次のようになっているはずです。
list = From x In Me Where x.FooDate.HasValue AndAlso x.FooDate.Value.Date >= fromDate And x.FooDate.Value.Date <= toDate
短絡と演算子の優先順位の規則のために(私自身のずっと前の質問への回答で概説されているように)、LINQが2番目を評価するのを止めるために、命令の2番目の部分を角かっこで囲む必要がありましたx.FooDate.Value.Date
。
list = From x In Me Where x.FooDate.HasValue AndAlso (x.FooDate.Value.Date >= fromDate and x.FooDate.Value.Date <= toDate)
LINQが実際にAndAlsoに準拠していることを確認するためのクイックテストコードをスローしてくれた両方の回答に感謝し、元の問題をより詳しく調べるように強制します。