Posteado por: alejamp | Enero 20, 2009

Linq error al filtrar nulos

Al hacer un una consulta con Linq suponía que no iba a tener problemas con los campos nulos. El problema esta en como Linq traduce la consulta a SQL.

Por ejemplo si escribimos el siguiente query:

List<CFD> cfds = (from c in db.CFD
                  where ((c.PolizaEn == poliza) || 
(c.PolizaS6 == poliza) || (c.PolizaSIS == poliza))
                  select c).ToList<CFD>();

Si poliza fuese null, Linq hará la siguiente consulta al SQL:

SELECT
FROM[CFD] AS[t0]
WHERE(([t0].[PolizaEn] = null) OR ([t0].[PolizaS6] =null) OR ([t0].[PolizaSIS] = null))

Para mi sorpresa no traduce los == null en is null. Por lo cual la consulta no retorna resultados. Para evitar este problema con campos nuleables se debe utilizar Linq de la siguiente manera:

List<CFD> cfds = (from c in db.CFD
                  where (object.Equals(c.PolizaEn, poliza) || 
object.Equals(c.PolizaS6, poliza) || object.Equals(c.PolizaSIS, poli))
                  select c).ToList<CFD>();
 


Dejar una respuesta

Su respuesta:

Categorías