none
Join em Linq to SQL RRS feed

  • Pergunta

  • Boa tarde,
    Sou novo por aqui e por favor não liguem se falar alguma asneira :)

    Preciso fazer um join usando Linq.

    É basicamente o seguinte:

    Tenho uma tabela de Cidades e este deve ser mostrada na tabela de Clientes que por sua vez grava os dados e uma Grid os motra (nesta hr que não consigo mostrar este cadastro), que também está na tabela de clientes, alguém pode me dar uma Luz?

    Fiz assim: var resultado = from Cl in DBClientes.Cliente

                                              Join Ci in DBClientes.Cidades on Cl.cl_CodCid equals Ci.ci_ID

                                              select ???????

    Não consigo juntar por ai :)

    Muito obrigado.



    Consegui fazer o linq colocando select new { Campo1, Campo2 }

    Gostaria de saber como faço para mudar o nome de apresentação do datagridview... por exemplo ele aparece ci_Nome, cl_Bairro .. Gostaria que saisse Cidade, Bairro .. etc.


    • Editado henriquemendesc sexta-feira, 7 de outubro de 2011 20:52 havia errado no exemplo
    sexta-feira, 7 de outubro de 2011 20:33

Respostas

  • Então, a parte do "gerando automaticamente", eu quis dizer que o grid estava com a propriedade AutoGenerateColumns=true; assim ele cria as colunas de acordo com o DataSource.

    E sobre o nome da coluna, acho que vai dar certo sim, pois esse tipo anônimo que você cria com o select new {...} vai gerar as propriedades com os nomes "amigáveis", dessa forma:

    select new {Cidade = CL.cl_Cidade} ;

    • Marcado como Resposta henriquemendesc sexta-feira, 7 de outubro de 2011 22:11
    sexta-feira, 7 de outubro de 2011 21:05

Todas as Respostas

  • Henrique,

     

    Cara, primeiro, acho que você não está juntando as tabelas corretas, pelo menos nesse exemplo que você deu está fazendo join da tabela Cliente com ela mesma...

    Enfim, vamos tentar assim:

    var resultado = from Cl in DBClientes.Cliente

     

                                              Join Ci in DBClientes.Cidade on Cl.cl_CodCid equals Ci.ci_ID

                                              select new { Cl.Nome, Ci.Cidade };

     

     

    Essa sua variavel resultado será um IEnumerable de um tipo anônimo, com as propriedades Nome e Cidade.

    Creio que isso já permita que você faça o Bind no seu grid.

    Qualquer dúvida, pode perguntar. 

    []'s

     


    • Editado Diego Bim sexta-feira, 7 de outubro de 2011 20:45 editei, esqueci um ponto e vírgula :)
    sexta-feira, 7 de outubro de 2011 20:45
  • Obrigado, quando vc estava respondendo acabei conseguindo fazer..

    Como eu colocaria os nomes apresentáveis no campo da grid, já que ela retorna os campos com o nome do Banco de dados, é possível?


    O exemplo estava errado msm é DBClientes.Clientes join DBClientes.Cidades

    desculpe.

    • Editado henriquemendesc sexta-feira, 7 de outubro de 2011 20:51 errei o exemplo
    sexta-feira, 7 de outubro de 2011 20:49
  • Hum, pelo que entendi vc está gerando as colunas automaticamente?

    Se for isso, dá pra fazer mais ou menos, assim:

    select new { Coluna1 = cl.Nome, Coluna2 = ci.Cidade };
    

    Mas vai ficar desse jeito né, "Coluna1", "Coluna2"... colocar duas palavras acho que não tem como!

     

    sexta-feira, 7 de outubro de 2011 20:53
  • Vou testar mais tarde, ao chegar em casa, mas já agradeço ficando a deixa .. não sei o que quis dizer com gerando automaticamente, gero ele direto na "query".

    está assim

    select new {CL.cl_Cidade} (referente ao nome da Cidade)

    Visualizo

    cl_Cidade

    Belo Horizonte

    Gostaria que fosse:

    Cidade

    Belo Horizonte

     

    Sem os negritos é claro. Obrigado.

    sexta-feira, 7 de outubro de 2011 21:01
  • Então, a parte do "gerando automaticamente", eu quis dizer que o grid estava com a propriedade AutoGenerateColumns=true; assim ele cria as colunas de acordo com o DataSource.

    E sobre o nome da coluna, acho que vai dar certo sim, pois esse tipo anônimo que você cria com o select new {...} vai gerar as propriedades com os nomes "amigáveis", dessa forma:

    select new {Cidade = CL.cl_Cidade} ;

    • Marcado como Resposta henriquemendesc sexta-feira, 7 de outubro de 2011 22:11
    sexta-feira, 7 de outubro de 2011 21:05
  • Cara valeu!!

    Certinho, realmente dois nomes não é possível desta forma, mas já da um gás aqui.

    sexta-feira, 7 de outubro de 2011 22:10