c# – 具有可空的Linq表达式
发布时间:2020-12-15 06:33:25 所属栏目:百科 来源:网络整理
导读:看起来像愚蠢的问题,但我只是不明白. 我的实体: public class Page{ public int Id { get; set; } //... public int? ParentId { get; set; }} 在控制器中: db.Pages.First(x = x.ParentId == null); 按预期工作(返回一些元素). 但: int? test = null;db.
看起来像愚蠢的问题,但我只是不明白.
我的实体: public class Page { public int Id { get; set; } //... public int? ParentId { get; set; } } 在控制器中: db.Pages.First(x => x.ParentId == null); 按预期工作(返回一些元素). int? test = null; db.Pages.First(x => x.ParentId == test); 引发序列不包含任何元素 我错过了什么? 解决方法
我相信有些LINQ提供程序在null之间存在一种奇怪的现象.尝试:
var query = db.Pages.First(x => (test != null && x.ParentId == test) || (test == null && x.ParentId == null)); 或者,针对不同情况使用不同的查询: var query = test == null ? db.Pages.First(x => x.ParentId == null) : db.Pages.First(x => x.ParentId == test); 基本上这是因为SQL将NULL视为不等于自身,因此: WHERE X = Y 如果X和Y都是空值,则仍然会失败.使用== null部分(带有文字null)强制转换为ISNULL或SQL等价物. 我同意这是一个痛苦,而其他人可能有更好的解决方法,但这可能会帮助你开始. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |