Usuário com melhor resposta
Join em Linq to SQL

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
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
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 :)
-
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.Cidadesdesculpe.
- Editado henriquemendesc sexta-feira, 7 de outubro de 2011 20:51 errei o exemplo
-
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!
-
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.
-
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
-