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