none
Consulta gerando erro: Object reference not set to an instance of an objetct RRS feed

  • Pergunta

  •  Dim resultado = From UF In UFContexto.UFSet Join Pa In UFContexto.PaisSet On UF.PaisPaisId Equals Pa.PaisId Select UF.UFId, UF.Nome, UF.Sigla, Pa.NomePais
    
    ou
    
    Dim pConsulta = From p In UFContexto.UFSet Select p.UFId, p.Nome, p.Sigla, p.Pais.NomePais

    Dessa formas consigo o resultado que espero, porem gera esse erro!!!

    Dessa outra forma não gera o erro, porem eu quero o nome do campo da outra tabela e não o id.

    Dim pConsulta = From p In UFContexto.UFSet.include("Pais")

    quinta-feira, 9 de fevereiro de 2012 16:53

Respostas

  • Olá Gusta,

    Veja se isto ajuda:

    Dim pConsulta = From p In UFContexto.UFSet Where p.Pais IsNot Nothing _
                    Select p.UFId, p.Nome, p.Sigla, p.Pais.NomePais
    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    • Marcado como Resposta Gusta24131 sexta-feira, 10 de fevereiro de 2012 16:04
    sexta-feira, 10 de fevereiro de 2012 15:41
    Moderador

Todas as Respostas

  • Olá Gusta,

    Veja se isto ajuda:

    Dim pConsulta = From p In UFContexto.UFSet Where p.Pais IsNot Nothing _
                    Select p.UFId, p.Nome, p.Sigla, p.Pais.NomePais
    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    • Marcado como Resposta Gusta24131 sexta-feira, 10 de fevereiro de 2012 16:04
    sexta-feira, 10 de fevereiro de 2012 15:41
    Moderador
  • Fernando,

    Funcionou perfeitamente. Muito Obrigado pela ajuda.

    sem querer abusar poderia me explicar a funçao do isnot nothing na clausa where.

    abs.

    sexta-feira, 10 de fevereiro de 2012 16:03
  • Olá Gusta,

    Na verdade, o LINQ internamente fará um laço de repetição lendo todos os itens.

    Em algum momento, ele encontrou uma instância de objeto cuja propriedade "Pais" estava nula.

    Diante disso, como vc estava consultando uma propriedade de uma instância nula de "Pais" ele disparou a mensagem de erro.

    Desta forma, com a clausula Where, acabamos filtrando todos os itens que não tem um "Pais" associado, e trabalhamos apenas com aqueles que possuem uma instância válida de "Pais".

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    sexta-feira, 10 de fevereiro de 2012 17:01
    Moderador
  • Fernando,

    Compreendi. mas ainda estou empacando com o mesmo problema. heheheh No caso em questao a Tabela UF tem Relacionamento com a PAis.

    Complicando um Pouco mais a Tabela Cidades, tem relacionamto com Clientes, Colaboradores e UF. Tentei Usar a mesma expressao com que vc me passou com algumas modifica~coes e n"ao resolveu. Teria que fazer um isnot nothing para cada relacionamento?

     Dim resultado = From p In Ctx.CidadesSet Where p.UF IsNot Nothing Select p.CidadeId, p.Nome, p.UF.Sigla, p.UF.Pais.NomePais

    Desde ja fico muito agradecido!

    abs

    sexta-feira, 10 de fevereiro de 2012 18:26
  • Olá Gusta,

    Sim, vc terá de fazer isso com todos os relacionamentos nos quais vc acessar propriedades durante a sua consulta LINQ.

    Poste sua expressão que eu lhe ajudo.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    sexta-feira, 10 de fevereiro de 2012 22:27
    Moderador
  • Desde já, muito obrigado!!!

     Try
                ' Dim resultado = From c In Ctx.CidadesSet Join u In Ctx.UFSet On c.UFUFId Equals u.UFId Join p In Ctx.PaisSet On p.PaisId Equals u.PaisPaisId Where c.UF IsNot Nothing Where c.Clientes IsNot Nothing Select c.CidadeId, c.Nome, u.Sigla, p.NomePais
    
                ' Dim resultado = From p In Ctx.CidadesSet Where p.UF IsNot Nothing Select p.CidadeId, p.Nome, p.UF.Sigla, p.UF.Pais.NomePais
    
                Dim resultado = From Cidade In Ctx.CidadesSet Select Cidade.CidadeId, Cidade.Nome, Cidade.UF, Cidade.UF.PaisPaisId
    
                frmCidades.gdvCidades.DataSource = resultado
                frmCidades.gdvCidades.Columns("CidadeId").HeaderText = "Código"
                frmCidades.gdvCidades.Columns("Nome").HeaderText = "Cidade"
                frmCidades.gdvCidades.Columns("UF").HeaderText = "Estado"
                frmCidades.gdvCidades.Columns("NomePais").HeaderText = "País"
                frmCidades.gdvCidades.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
            Catch ex As Exception
                MsgBox("Erro : " & ex.Message)
            End Try
    
        End Sub

    segunda-feira, 13 de fevereiro de 2012 13:52