LINQ a un problema de conjunto de datos DBNULL / excepción de referencia nula
Pregunta
Tengo la siguiente consulta LINQ que siempre resulta en un error cuando mi columna "Observación" en dtblDetail es nula, a pesar de que la prueba si es NULL.
var varActiveAndUsedElementsWithDetails =
from e in dtblElements
join d in dtblDetails on e.PK equals d.FK into set
from d in set.DefaultIfEmpty()
where (e.ElementActive == true)
select new
{
ElementPK = e.PK,
Remark = d.IsRemarkNull() ? null : d.Remark
};
El mensaje de error fue: "El valor de la columna 'Observación' en 'dtblDetails' mesa es DBNull." Después de añadir la prueba para d.IsRemarkNull () se lanza una excepción de referencia nula.
¿Me pueden ayudar con esto?
Ya he comprobado los siguientes sitios web, pero no encontró nada útil aparte de eso tengo que probar para DBNULL. Pero, como dijo esto no resuelve mi problema.
Solución
El problema era que todo el tema 'd' estaba vacía. Así llamando 'd.IsRemarkNull ()' dio lugar a la excepción de referencia nula. El siguiente código solucionó el problema:
var varActiveAndUsedElementsWithDetails =
from e in dtblElements
join d in dtblDetails on e.PK equals d.FK into set
from d in set.DefaultIfEmpty()
where (e.ElementActive == true)
select new
{
ElementPK = e.PK,
Remark = d == null? null : (d.IsRemarkNull() ? null : d.Remark)
};
Otros consejos
Cuando se acerca el error? ¿Es posible que sea el d.IsRemarkNull () que lo está causando? ¿Cómo es ese método como?
Tal vez:
DBNull.Value.Equals(d.Remark)
puede que este campo no permite nulos en dB, obtener un valor por defecto para ello, y evitar la manipulación de los valores nulos