【发布时间】:2014-03-27 10:19:24
【问题描述】:
这里有些奇怪。通过实体框架访问的数据表有一个可以为空的字符串/varchar 的字段。
当您尝试使用 Linq 选择事物以获取不等于给定值的项目时,即
var thingsToRun = rep.Things.Where(t => t.Status != "Running");
您得到的是所有状态为“正在运行”之外的所有事物的列表除了那些状态为空的事物。
换句话说,如果您有三个状态为“正在运行”、“未运行”和 NULL 的事物,则上述查询将只返回一个状态为“未运行”的项目。
我认为这与 C# null 和 DB null 之间的不匹配有关。但这似乎很奇怪。有什么简单的方法吗?
编辑:感谢您的回答。仍然好奇为什么会发生这种情况?
【问题讨论】:
-
您要省略空值还是要获取它们?一般来说,这与 C# 或 LINQ 无关,而是与您的数据库有关。通常,如果您不明确搜索它们,数据库永远不会返回空记录:
WHERE Status IS NULL或Status IS NOT NULL。所以一个空值既不是=也不是!=,它根本就没有定义。
标签: c# sql linq entity-framework