none
ERRO na consulta com LINQ - Não estou conseguindo resolver RRS feed

  • Pergunta

  • Caros colegas,

    Tenho a seguinte query LINQ:

                    var retList = (from S in _contexto.solicitacao
                                         join CC in _contexto.centroCusto on S.CenCusCodigo equals CC.CenCusCodigo                                 //INNER JOIN
                                        from CC2 in _contexto.centroCusto.Where(lCC2 => lCC2.CenCusCodigo == S.CenCusCodigoReq).DefaultIfEmpty() //LEFT OUTER JOIN
                                        where ((S.SolLiberada == 1 || S.SolLiberada == 2) && S.EmpCodigo == 131
                                        && (_contexto.ItensSolicitacao.Where(i => i.colcodigo == null && i.SolCodigo == S.SolCodigo).Count() != 0)
                                        && (_contexto.ItensSolicitacao.Where(i => i.SolCodigo == S.SolCodigo).Sum(i => i.IteSolQuantidade) != 0))
                                       orderby CC.CenCusIndice
                                       select new
                                       {
                                           SolCodigo = S.SolCodigo,
                                           SolDataEntrega = S.SolDataEntrega,
                                           SolCodigoControle = S.SolCodigoControle,
                                           SolLiberada = S.SolLiberada,
                                           SolData = S.SolData,
                                           SolObs = S.SolObs,
                                           CenCusCodigo = CC.CenCusCodigo,
                                           CenCusDescricao = CC.CenCusDescricao,
                                           CenCusIndice = CC.CenCusIndice,
                                           cencuscodigoReq = CC2.CenCusCodigo,
                                           Cencusdescricaoreq = CC2.CenCusDescricao,
                                           cencusindicereq = CC2.CenCusIndice,
                                           CONT_PRODUTOS = _contexto.ItensSolicitacao.Where(i => i.colcodigo == null && i.SolCodigo == S.SolCodigo).Count()
                                       }).ToList();

    Quando executada, está me retornando a seguinte mensagem de erro

     Additional information: The cast to value type 'System.Int32' failed because the materialized value is null. Either the result type's generic parameter or the query must use a nullable type.

    Sei que se trata de um valor null sendo retornado. 

    Mas não estou conseguindo tratar esse problema, devido a minha pouca experiência com LINQ. Não sei se está retornando uma linha inteira nula ou se o problema está relacionado a algumas das variáveis citadas na query, pois não consegui debugá-la.

    Sabem me dizer como posso resolver isso?

    Agradeço a ajuda!

    Att,


    Buscando o conhecimento

    segunda-feira, 1 de agosto de 2016 13:54

Respostas

  • Seu join está correto, mas terá que adicionar o "DefaultIfEmpty" em todos os relacionamentos do "left join" que pode gerar nulo. É por isso que está recebendo esse erro.

    Só comparar com "null" não vai funcionar.

    • Marcado como Resposta Januário quarta-feira, 7 de agosto de 2019 19:38
    segunda-feira, 8 de agosto de 2016 17:53