Fazer Inner Join e Left Join utilizando LINQ é muito simples.
Eu tenho a seguinte estrutura de banco de dados:
Dados ara a tabela TipoAnimal:
- Canino
- Felino
Dados para a Tabela Cliente:
- Celso Zequim
- Ana Paula
para a tabela Animal eu inseri um registro, dizendo que o Celso Zequim possui um Animal do tipo Canino com o nome de Babalu.
Para realizar um consulta no SQL Server para trazer os Todos os clientes e seus respectivos animais, ficaria dessa maneira:
select Cliente.Nome, Animal.Nome as Animal, TipoAnimal.Nome as Tipo from Cliente
inner join Animal on animal.idcliente = cliente.id
inner join
TipoAnimal on Animal.idTipoAnimal
= TipoAnimal.id
Para realizar essa query no LINQ teriamos:
var Resultado = from
_C in bd.Clientes
join _A in bd.Animals on _C.id equals
_A.idCliente
join _T in
bd.TipoAnimals on _A.idTipoAnimal equals _T.id
select new
{
Nome = _C.nome,
Animal = _A.nome,
Tipo = _T.nome
};
Se eu quiser trazer todos os clientes, independente se eles tem animais ou não, teremos a seguinte query, com Left Join:
select Cliente.Nome, Animal.Nome as Animal, TipoAnimal.Nome as Tipo from Cliente
Left join Animal on animal.idcliente = cliente.id
Left join TipoAnimal on Animal.idTipoAnimal = TipoAnimal.id
Já no LINQ teríamos:
var Resultado
= from _C in
bd.Clientes
join _A in bd.Animals on _C.id equals
_A.idCliente into _a
from _A in _a.DefaultIfEmpty()
join _T in
bd.TipoAnimals on _A.idTipoAnimal equals _T.id
into _t
from _T in
_a.DefaultIfEmpty()
select new
{
Nome = _C.nome,
Animal = _A.nome,
Tipo = _T.nome
};
É um pouco mais complicado a construção, porém com o tempo se torna automático.
