2011-12-28 11 views
5

Ho questo codice per trovare il nodo radice di un albero:Perché in questa query di linq non funziona un Guid nullable?

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

questa query restituisce 0 risultati.

Se corro questa domanda ho la fila atteso tornato:

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

Perché non è la prima opera di query (utilizzando l'ultima versione di Entity Framework)?

EDIT:

Soluzione:

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

risposta

10

Questo è un bug noto in LINQ to Entities quando si tratta di valore-tipi nullable. Secondo il relativo Connect issue, questo verrà risolto nella prossima versione.

+0

grazie - cambierò il codice per evitare il filtraggio sulla nullable Guid – woggles

+2

Non è ancora stato risolto nel EF 6.1.3. Se è stato riparato, è di nuovo rotto. – David

0

provare questo

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

continua a non funzionare - sembra un bug nel Framework – woggles

+0

Il recupero del 'Valore' da un Nullable in cui' HasValue' è falso, genererà un'eccezione. – GvS

Problemi correlati