我们有几个使用.Net Framework 4和Linq to Entities的VB.Net项目。转向EF对我们来说是一个新的转变(使用了约4-6个月),因为我们可以更快地编写代码,得到了高层管理的支持。我们仍然使用很多存储过程,但我们甚至通过Linq to Entities执行这些存储过程。
我希望能够解决一些困惑,但我找不到一个直接的答案。我们有一些查询,我们想要记录某个特定字段具有NULL值。这些都是简单的选择查询,没有聚合或左连接等。Microsoft建议查询看起来像这样MSDN Link:
我有几个项目都是这样做的,效果很好,在IDE中没有警告。最近另一个开发人员创建了一个新项目,当他像上面那样进行空值检查时,我们都会在IDE中收到以下警告:
警告1 这个表达式将始终评估为Nothing(由于从等号运算符的空传播)。要检查值是否为空,请考虑使用'Is Nothing'。
比较这些项目,每个项目都打开了选项显式和选项严格。如果我们忽略这个警告,在应用程序运行时我们得到了确切的记录集。如果我将=号更改为IS,则警告消失。但为什么在一个项目中出现了这个警告而在其他项目中却没有呢?即使在MSDN上也有使用等号运算符的例子,这让人感到困惑。
我希望能够解决一些困惑,但我找不到一个直接的答案。我们有一些查询,我们想要记录某个特定字段具有NULL值。这些都是简单的选择查询,没有聚合或左连接等。Microsoft建议查询看起来像这样MSDN Link:
dim query = from a in MyContext.MyTables
Where a.MyField = Nothing
Select a
我有几个项目都是这样做的,效果很好,在IDE中没有警告。最近另一个开发人员创建了一个新项目,当他像上面那样进行空值检查时,我们都会在IDE中收到以下警告:
警告1 这个表达式将始终评估为Nothing(由于从等号运算符的空传播)。要检查值是否为空,请考虑使用'Is Nothing'。
比较这些项目,每个项目都打开了选项显式和选项严格。如果我们忽略这个警告,在应用程序运行时我们得到了确切的记录集。如果我将=号更改为IS,则警告消失。但为什么在一个项目中出现了这个警告而在其他项目中却没有呢?即使在MSDN上也有使用等号运算符的例子,这让人感到困惑。
Equals
关键字。我没有测试的方法,但也许可以尝试一下这个?Where a.MyField Equals Nothing
- CᴏʀʏJoin
子句(据我所知)中使用。我认为你不能在任何其他地方使用它。 - Jeff Mercado