Usuário com melhor resposta
C# windows forms Joins Com a Linq

Pergunta
-
Ola, alguem sabe onde pegar exemplos de Joins com a Linq?
Quero fazer algo simples
using (DataLinqDataContext db = new DataLinqDataContext())
{
var q =
from e in db.Cad_Cidades
join o in db.Cad_Estados on e equals o.Codigo into NomeEstado
from o in NomeEstado.DefaultIfEmpty()
select new { e.Nome, e.cod_Pais, NomeEst = o };
string nomeCidade = q["Nome"]; //Aqui naum to sabendo como usar
string nomeEstado = q["NomeEst"];
}
E numa outra situação pegar o codigo do Pais na tabela estado e trazer seu nome, tudo numa mesma instrução e trazer todos os registros de todas as tabelas, cidade, estado e pais.
o que no SQL server ficaria assim:
SELECT dbo.Cad_Cidade.Codigo, dbo.Cad_Estado.Codigo AS CodigoEstado, dbo.Cad_Pais.Codigo AS CodigoPais, dbo.Cad_Cidade.Nome,
dbo.Cad_Cidade.DDD, dbo.Cad_Cidade.Cod_Estado, dbo.Cad_Cidade.Cod_Pais, dbo.Cad_Estado.Nome AS NomeEstado, dbo.Cad_Estado.Pais,
dbo.Cad_Estado.sigla, dbo.Cad_Pais.Nome AS NomePais, dbo.Cad_Pais.DDI, dbo.Cad_Pais.Sigla AS SiglaPais
FROM dbo.Cad_Pais RIGHT OUTER JOIN
dbo.Cad_Estado ON dbo.Cad_Pais.Codigo = dbo.Cad_Estado.Cod_Pais RIGHT OUTER JOIN
dbo.Cad_Cidade ON dbo.Cad_Estado.Codigo = dbo.Cad_Cidade.Cod_Estado
Sera possivel fazer isso com Linq?- Movido AndreAlvesLimaModerator quinta-feira, 25 de fevereiro de 2010 12:08 Migrado de WinForms e Smart Client (De:Windows Forms & Smart Client)
Respostas
-
Clodoaldo, o listview não é um dataset.Se você está querendo popular por exemplo um listbox, faça através de um foreach da sua coleção. Usando o exemplo que passei na post anterior:
foreach var dados in pedidos { ListBox1.Items.Add("dados"); ListBox1.Items.Add("------"); // insere uma linha pontilhada entre os items, mas isso ja ficaria a seu carater }
- Sugerido como Resposta Leonardo Mello Gaona terça-feira, 2 de março de 2010 01:39
- Marcado como Resposta AndreAlvesLimaModerator terça-feira, 2 de março de 2010 11:50
Todas as Respostas
-
Prezado,
Estou migrando seu post para o fórum de LINQ.
Por favor, da próxima vez que tiver alguma dúvida relacionada a esse assunto, poste por lá.
Obrigado!
André Alves de Lima
Visite o meu site: http://andrealveslima.spaces.live.com
Me siga no Twitter: @andrealveslima -
Prezado,
Dê uma olhada no conteúdo deste link:
http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx
Na minha opinião, tem os melhores exemplos de LINQ todos num só lugar... Passagem obrigatória pra quem está aprendendo LINQ...
Nele tem uma seção que trata só de JOINS (Join Operators)... Acredito que você vai conseguir resolver seu problema com esses exemplos...
André Alves de Lima
Visite o meu site: http://andrealveslima.spaces.live.com
Me siga no Twitter: @andrealveslima -
-
Prezado,
Como a sentença vai retornar mais de um registro, você precisa percorrê-los, utilizando um foreach...
Seria algo como:
var q = from e in db.Cad_Cidades join o in db.Cad_Estados on e equals o.Codigo into NomeEstado from o in NomeEstado.DefaultIfEmpty() select new { e.Nome, e.cod_Pais, NomeEst = o }; foreach (var registro in q) { string nomeCidade = q.Nome; string nomeEstado = q.NomeEst; }
André Alves de Lima
Visite o meu site: http://andrealveslima.spaces.live.com
Me siga no Twitter: @andrealveslima -
O guri obrigado por retornar, veja só imagina uma tabela de Nota fiscal ou de algum outro documento com muitos campos e vc precisa listar toda a tabela( e.Nome, e.cod_Pais, e.campo, e .campo1, e......) minha pergunta...
não tem como fazer um "tabela.*" ???? e se na tabela da junção vc precisar de mais campos neste caso do Nome e programador precisar da sigla e outro campo qualquer?
obrigado -
-
-
Não, dataset são classes para manipulação de banco de dados. Dentro de um form, o datagridview por exemplo parece um grid do Excel.Você joga um datagridview no form, e atribui à ele os dados da consulta com LINQ.Exemplo:
private void CarregarPedidos() { var pedidos = from c in nwind.Customers join p in nwind.Orders on c.CustomerID equals p.CustomerID where c.CompanyName == textBox1.Text select new { p.OrderID, p.OrderDate, p.RequiredDate}; DataGridView1.DataSource = pedidos; }
No seu caso, você só precisa atribuir a sua coleção genérica como DataSource do DataGridView- Sugerido como Resposta Leonardo Mello Gaona domingo, 28 de fevereiro de 2010 04:55
-
-
Clodoaldo, o listview não é um dataset.Se você está querendo popular por exemplo um listbox, faça através de um foreach da sua coleção. Usando o exemplo que passei na post anterior:
foreach var dados in pedidos { ListBox1.Items.Add("dados"); ListBox1.Items.Add("------"); // insere uma linha pontilhada entre os items, mas isso ja ficaria a seu carater }
- Sugerido como Resposta Leonardo Mello Gaona terça-feira, 2 de março de 2010 01:39
- Marcado como Resposta AndreAlvesLimaModerator terça-feira, 2 de março de 2010 11:50