LINQ ao conjunto de dados de referência DBNULL excepção problema / null
Pergunta
Eu tenho a seguinte consulta LINQ que sempre resulta em um erro quando minha coluna "Observações" em dtblDetail é nulo, mesmo que eu teste se é 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
};
A mensagem de erro foi: "O valor para a coluna 'Observação' em 'dtblDetails' tabela é DBNull." Após a adição do teste para d.IsRemarkNull () uma exceção é lançada referência nula.
Você pode me ajudar com isso?
Eu já verifiquei os seguintes sites, mas não encontrou nada de útil que não o tenho de teste para DBNULL. Mas, como disse isso não resolver o meu problema.
Solução
O problema era que item de toda a 'd' estava vazio. Então, chamando 'd.IsRemarkNull ()' resultou na exceção de referência nula. O código a seguir corrigiu o 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)
};
Outras dicas
Onde está o erro vem? É possível que ele é o d.IsRemarkNull () que está causando isso? O que faz esse olhar método como?
Talvez:
DBNull.Value.Equals(d.Remark)
talvez este campo não permite nulo no db, obter um valor padrão para ele, e os valores evitar a manipulação nulos