c# – 当where子句与NULL值进行比较时,LINQ-to-SQL查询不返回行
发布时间:2020-12-15 04:19:04 所属栏目:百科 来源:网络整理
导读:让我们考虑一个包含2列的表:ID(int)和Role(字符串).两者都可以为空. 现在假设两列中的数据是: ID Role-- ---- 1 NULL 2 Admin 查询如下所示: Listtypes t1 = ( from a in datacontext.RoleTable where a.Role != "Admin" select a).ToList(); 我认为上面
让我们考虑一个包含2列的表:ID(int)和Role(字符串).两者都可以为空.
现在假设两列中的数据是: ID Role -- ---- 1 NULL 2 Admin 查询如下所示: List<types> t1 = ( from a in datacontext.RoleTable where a.Role != "Admin" select a ).ToList(); 我认为上面的查询应该返回表的第一条记录,因为它的Role列不等于’Admin’,但查询返回一个空列表. 现在,当我使用此查询时: List<types> t2 = ( from a in datacontext.RoleType where a.Role != "Admin" && a.Role == DBNull.Value.ToString() select a ).ToList(); 我得到了正确的答案. 任何人都可以告诉我为什么第一个查询不起作用. 仅供参考:如果表中第一行中的Role列更改为User而不是NULL,则第一个查询可以正常工作. 我正在使用SQL Express和LINQ to SQL. 解决方法
第一个查询的行为不符合预期,因为它被转换为SQL,它等效于以下内容:
select * from RoleTable where Role != 'Admin' 现在,在SQL NULL!=’Admin’不是TRUE(也不是FALSE – 它是未定义的). 顺便说一句:你的第二个查询也是错误的,它只会选择那些为null的行.它不会选择具有“用户”角色的行. 正确的查询将如下所示: List<types> t2 = (from a in datacontext.RoleTable where a.Role != "Admin" || a.Role == null select a).ToList(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |