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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top