Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Deise Vicky

Consultas Linq ("left join")

Recommended Posts

Olá!

 

Estou desenvolvendo uma aplicação no trabalho e em alguns momentos preciso fazer consultas (usando linq to entities) utilizando "left join".

Pesquisei muito na internet como fazer e depois de quebrar muito a cabeça descobri uma maneira de como fazer isso, por isso resolvi postar o que consegui para quem sabe ajudar alguém.

 

Aí vai um exemplo de consulta:

 

var result = from pe in model.Pessoa
            join co in model.Colecao on pe.IdPessoa equals co.IdPessoa into COLECTION
            from coll in COLECTION.DefaultIfEmpty()
            select new{ pe.NomePessoa, pe.IdadePessoa, coll.NomeColecao, coll };

 

Nessa consulta por exemplo, quero trazer todas as pessoas cadastradas e se houver uma coleção cadastrada para a pessoa, retorno os dados da tabela Coleção, já que nem todas as "pessoas" possuim uma coleção cadastrada. O DefaultIfEmplty() funciona como se fosse o "left" numa consulta SQL, se não colocássemos o DefaultIfEmpty() a consulta nos retornaria somente as pessoas que possuem uma coleção cadastrada.

 

Espero que esse exemplo ajude alguém, e qualquer dúvida estamos aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ótimo:

quem quiser realizar a mesma consulta usando LAMBDA:


var result = model.Pessoa.GroupJoin(model.Colecao, p => p.IdPessoa, g => g.IdPessoa,
                                                             (p, g) => new { p, g }).SelectMany(@t => @t.g.DefaultIfEmpty(),
                                                                                     (@t, i) => new {
                                                                                                	@t.p.NomePessoa,
                                                                                                	@t.p.IdadePessoa,
                                                                                                	i.NomeColecao,
                                                                                                	i
                                                                                            	});

 

Mais informações sobre o método GroupJoin

http://msdn.microsoft.com/en-us/library/system.linq.enumerable.groupjoin.aspx

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.