Won*_*der 6 c# linq linq-to-entities
看起来像愚蠢的问题,但我只是不明白.我的实体:
public class Page
{
public int Id { get; set; }
//...
public int? ParentId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在控制器中:
db.Pages.First(x => x.ParentId == null);
Run Code Online (Sandbox Code Playgroud)
按预期工作(返回一些元素).但:
int? test = null;
db.Pages.First(x => x.ParentId == test);
Run Code Online (Sandbox Code Playgroud)
抛出 Sequence contains no elements
我错过了什么?
Jon*_*eet 10
我相信有些LINQ提供程序在null之间存在一种奇怪的现象.尝试:
var query = db.Pages.First(x => (test != null && x.ParentId == test) ||
(test == null && x.ParentId == null));
Run Code Online (Sandbox Code Playgroud)
或者,针对不同情况使用不同的查询:
var query = test == null ? db.Pages.First(x => x.ParentId == null)
: db.Pages.First(x => x.ParentId == test);
Run Code Online (Sandbox Code Playgroud)
基本上这是因为SQL将NULL视为不等于自身,因此:
WHERE X = Y
Run Code Online (Sandbox Code Playgroud)
如果X和Y都是空值,则仍然会失败.使用该== null
部分(使用文字 null)强制转换为ISNULL
SQL等效项或其他任何内容.
我同意这是一个痛苦,而其他人可能有更好的解决方法,但这可能会帮助你开始.
归档时间: |
|
查看次数: |
159 次 |
最近记录: |