2011-12-28 11 views
5

Tengo este código para encontrar el nodo raíz de un árbol:¿Por qué el uso de un Guid nulo no funciona en esta consulta de linq?

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

Esta consulta devuelve 0 resultados.

Si me quedo esta consulta consigo devolvió el registro esperada:

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

¿Por qué no la primera obra de consulta (utilizando la última versión del marco de la entidad)?

EDIT:

Solución:

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

Respuesta

10

Esto es un error conocido en LINQ a Entidades de valor cuando se trata de tipos anulables. De acuerdo con el relevante Connect issue, esto se solucionará en la próxima versión.

+0

gracias - voy a cambiar el código para evitar el filtrado de la anulable Guid – woggles

+2

Todavía no se fija en EF 6.1.3. Si alguna vez fue arreglado, se rompe nuevamente. – David

0

probar este

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

aún no funciona - parece que es un error en el Marco – woggles

+0

Recuperando el 'Valor' de un Nullable donde' HasValue' es falso, lanzará una excepción. – GvS

Cuestiones relacionadas