c#LINQ,其中包含可为空的布尔字段

c#LINQ,其中包含可为空的布尔字段,linq,Linq,我有以下疑问: where !(tf.Shipped.HasValue == true || tf.Ordered.HasValue == true || tf.Processed.HasValue == true) 请注意,Shipped、Ordered和Processed都是可为空的布尔字段 我试图做的是检查,如果发货、订购或处理的值为true,则结果中不应包含这些值 在我的情况下,命令是真实的,但我仍然得到这些记录。不知道我做错了什么 您正在检查可空布尔值是否有值。 如果该值为

我有以下疑问:

    where !(tf.Shipped.HasValue == true || tf.Ordered.HasValue == true || tf.Processed.HasValue == true) 
请注意,Shipped、Ordered和Processed都是可为空的布尔字段

我试图做的是检查,如果发货、订购或处理的值为true,则结果中不应包含这些值


在我的情况下,命令是真实的,但我仍然得到这些记录。不知道我做错了什么

您正在检查可空布尔值是否有值。
如果该值为
false
HasValue
仍将为true

你可能想写作

where !(tf.Shipped == true || tf.Ordered == true || tf.Processed == true) 
比较可为空的布尔值是唯一应该写入
==true
的情况

但是,您可能不应该首先使用可为空的布尔值。

除非您在
null
false
之间有一个有意义的区别,否则您应该改用常规bool,这样可以省去很多麻烦。

您是否检查
tf.Shipped
是否为真或是否有值?可为空的bool有时会从您无法控制的库中返回。在这种情况下,知道正确的处理方法是很好的。谢谢你的提示!有时空值具有有效的业务含义,并且是客户机所需要的,因为它们是数据库查询中的一个难题。