2012-01-27 65 views
2

我有以下查询:C#LINQ其中可空布尔字段

where !(tf.Shipped.HasValue == true || tf.Ordered.HasValue == true || tf.Processed.HasValue == true) 

注意发货,有序和加工都为空的布尔领域。

我想要做的是检查如果发货或订购或处理的值为真,他们不应该在结果中。

在我的情况Ordered是真的,但我仍然得到这个记录。不知道我做错了什么。

+0

你在检查'tf.Shipped'是否为真,或者它是否有值? – danihp 2012-01-27 17:39:05

回答

7

您正在检查可为空布尔型是否具有值
如果该值为false,则HasValue仍然为真。

你可能想要写

where !(tf.Shipped == true || tf.Ordered == true || tf.Processed == true) 

比较可空布尔变量就是一个应该写== true的唯一案例。

但是,您可能不应该首先使用可空的布尔值。
除非你有一个有意义的区别nullfalse,你应该使用常规布尔,而不是自己节省很多头痛。

+0

不可用的布尔有时从图书馆退出控制。在这些情况下,很高兴知道处理它们的正确方法。谢谢你的提示! – solvingJ 2017-05-18 17:53:48