2011-12-28 50 views
5

我有这样的代码来寻找树的根节点:为什么在这个linq查询中不使用可空的Guid工作?

Guid? currentNode = null; 
var root = db.RecursiveTrees.Where(x => x.ParentId == currentNode).ToList(); 

该查询返回0的结果。

如果我运行此查询我得到预期的返回行:

var root = db.RecursiveTrees.Where(x => x.ParentId == null).ToList(); 

为什么不先查询工作(使用最新版本的实体框架)?

编辑:

解决方法:

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();  

回答

10

这在LINQ一个已知的错误,以实体空值类型的时候。根据相关的Connect issue,这将在下一个版本中修复。

+0

感谢 - 我会改变的代码,以避免对可空的Guid – woggles 2011-12-28 08:22:08

+2

过滤它仍然不是固定的EF 6.1.3。如果它被修复了,它会再次被破坏。 – David 2016-10-25 13:37:23

0

试试这个

Guid? currentNode = null; 
var root = db.RecursiveTrees.Where(x => x.ParentId == currentNode.Value).ToList(); 
+0

仍然不起作用 - 看起来像框架中的错误 – woggles 2011-12-28 08:23:38

+0

从HasValue为false的Nullable获取'Value'会引发异常。 – GvS 2011-12-28 08:29:57

相关问题