2011-12-28 11 views
5

私は、ツリーのルートノードを見つけるために、このコードを持っている:このlinqクエリでnullable 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(); 

なぜ(エンティティフレームワークの最新バージョンを使用して)最初のクエリは動作しませんか?

EDIT:

回避策:

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

NULL可能値-種類を扱う場合は、エンティティへのLINQでの既知のバグです。関連するConnect issueによると、これは次のリリースで修正される予定です。

+0

感謝してみてください - 私はそれはまだEF 6.1.3で修正されていないNULL可能のGuid – woggles

+2

のフィルタリングを回避するためにコードを変更しますが。それが修正された場合、それは再び壊れています。 – David

0

この

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

はまだ動作しません - フレームワークのバグのように見えます – woggles

+0

'HasValue'がfalseのNullableから' Value'を取得すると例外がスローされます。 – GvS

関連する問題