C# 为什么';在这个linq查询中使用可为空的Guid是否有效?
我有以下代码来查找树的根节点:C# 为什么';在这个linq查询中使用可为空的Guid是否有效?,c#,asp.net,linq,entity-framework,C#,Asp.net,Linq,Entity Framework,我有以下代码来查找树的根节点: Guid? currentNode = null; var root = db.RecursiveTrees.Where(x => x.ParentId == currentNode).ToList(); 此查询返回0个结果 如果运行此查询,将返回预期的行: var root = db.RecursiveTrees.Where(x => x.ParentId == null).ToList(); 为什么第一个查询不起作用(使用最新版本的entit
Guid? currentNode = null;
var root = db.RecursiveTrees.Where(x => x.ParentId == currentNode).ToList();
此查询返回0个结果
如果运行此查询,将返回预期的行:
var root = db.RecursiveTrees.Where(x => x.ParentId == null).ToList();
为什么第一个查询不起作用(使用最新版本的entity framework)
编辑:
解决方法:
List<RecursiveTree> root;
if (nodeid == null)
root = db.RecursiveTrees.Where(x => x.ParentId == null).ToList();
else
root = db.RecursiveTrees.Where(x => x.ParentId == new Guid(nodeid)).ToList();
列表根目录;
if(nodeid==null)
root=db.RecursiveTrees.Where(x=>x.ParentId==null.ToList();
其他的
root=db.RecursiveTrees.Where(x=>x.ParentId==newguid(nodeid)).ToList();
在处理可空值类型时,这是LINQ to实体中的一个已知错误。根据相关说明,这将在下一版本中修复。试试这个
Guid? currentNode = null;
var root = db.RecursiveTrees.Where(x => x.ParentId == currentNode.Value).ToList();
谢谢-我将更改代码以避免在EF 6.1.3中仍然没有修复的可空GuidIt上进行过滤。如果它曾经被修复过,它将再次被破坏。从一个可为null的
HasValue
中检索Value
将抛出异常。