2011-12-28 51 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

相關問題