LINQ a un problema de conjunto de datos DBNULL / excepción de referencia nula

StackOverflow https://stackoverflow.com/questions/881225

  •  22-08-2019
  •  | 
  •  

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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top