可空比特字段真或假检测

时间:2016-11-16 16:10:39

标签: c# sql-server linq linq-to-entities

如果我有一个可空的位字段(名为'Disabled'),数据如下:

ID | Name | Disabled
--------------------
1  | Mine | null
2  | Yours| 1

如果我然后执行以下Linq To Entities语句,则不返回任何值:

from r in Rates
where r.Disabled != true
select r

但是如果我执行这个Linq To Entities声明:

from r in Rates
where r.Disabled == true
select r

返回ID为2的预期一行。

我希望第一个语句返回第1行,其中'Disabled'字段的值为null。

我在这里错过了一招吗?为什么第一个语句不返回空值行?

编辑让我重新解释一下这个问题......为什么不返回空行?我知道我可以进行简单的空检查。

2 个答案:

答案 0 :(得分:2)

from r in Rates
where r.Disabled != true
   || r.Disabled IS NULL
select r

答案 1 :(得分:1)

正如你所说,你有可空的布尔。您可以HasValue检查null。

bool? nullableBool = null;
if (nullableBool.HasValue == false)
    {
      //Null
    }

如果您想将falsenull视为“非正确”,那么您可以使用GetValueOrDefault属性

bool? nullableBool = false;

bool? nullableBool = false;

在这两种情况中的任何一种情况下,此if条件都会满足。

if (!nullableBool.GetValueOrDefault(false))
    {

    }

您可以在代码中使用这些逻辑。