如何指定带有可为空列的 where 子句

How to specify where clause with nullable column

我有一个样例table像blow。

[id] [名称] [DeleteFlg]
1 苹果 NULL
2 柠檬真
3 葡萄假

而且我想 select 在 Linq 中像下面的 SQL 一样。

select *
from Sample
where DeleteFlg != True

但是,这 returns 什么都没有 (ret.Count = 0)。

var ret = (
  from f in db.Sample
  where f.DeleteFlg != true
  select new { Name = f.Name }
)

除了带 DeleteFlg 的 Lemon,我如何 select?

您可能缺少空检查(因为您正在使用 EF)。

where !f.DeleteFlg.HasValue || !f.DeleteFlg.Value

应该 select 那些 DeleteFlg 为 NULL 或 DeleteFlg 等于 false 的条目。

您的查询 returns 一行 Name='Grape'。 所以,如果你想要具有相同结果的 linq 查询,你需要这个:

var ret = (
    from f in db.Sample
    where f.DeleteFlg.HasValue && !f.DeleteFlg.Value
    select new {Name = f.Name}
  ).ToList();

var ret = db.Sample.Where(f => f.DeleteFlag.HasValue && !f.DeleteFlag.Value).ToList();

这两个 linq 表达式 returns 列表中的一项。