我有一个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