我有一個LINQ2SQL查詢,看起來像這樣:這真的是一個可能的InvalidOperationException?
var data = from d in dc.GAMEs
where (d.GAMEDATE + d.GAMETIME.Value.TimeOfDay) >= DateTime.Now
&& d.GAMESTAT == 'O' && d.GAMETYPE == 0 select d;
ReSharper的是強調在藍色的「d.GAMETIME.Value.TimeOfDay」,並告訴我,這是一個可能System.InvalidOperationException。雖然我知道,如果它是C#代碼,引用值而不檢查它是否有值會是這樣,我不知道這是否是一個Linq查詢是真的。
實際生成的SQL看起來非常可怕,並且讓我想灼傷我的眼睛,但是我看不到任何看起來可能是空引用的東西。我可以放心地忽略這個嗎?
(暫時忽略其他問題,如它返回預期的結果)
編輯:
在進一步的思考,我可以看到上面可能會導致異常的LinqToObjects查詢,還有其他類型(XML?)。所以是的,我想Resharper只是在安全。
我沒有對數據庫結構的控制權,它被第三方工具使用並且必須符合它們的模式。 FWIW,GAMEDATE也是可以空的,但沒有必要訪問任何成員,因爲它是隱含的。另外,你的修改並不是真正的同一個查詢,因爲沒有時間的gamedate只能在今天進行比較,而不是現在。 – 2010-07-15 21:11:10
正確的是,與今天相比是後備。在你的表單中,當GAMETIME爲NULL時,它就會崩潰。 – 2010-07-15 23:55:52