Tenemos dos tablas enlazadas
Tabla Persona, Campos :IdPersona, Nombre,Apellido, IdTribu
Tabla Tribu, Campos: IdTribu, NombreTribu
CASO LEFT JOIN:
Queremos obtener el nombre y apellido de todas las personas y el nombre de la tribu en caso de pertenecer a alguna.
Nuestra consulta en SQL server es:
1 2 3 |
Select Pe.Nombre, Pe.Apellido, Tr.NombreTribu from Persona Pe left join Tribu tr on Pe.IdTribu=Tr.IdTribu |
En linq sería:
1 2 3 4 5 6 7 8 9 |
from pe in ListaPersonas join tr in ListaTribus on pe.IdTribu equals tr.IdTribu into UnionPersonaTribu from tr in UnionPersonaTribu.DefaultIfEmpty() //Obtiene la tribu a null sino esta en la unión select new { PersonaNombre=pe.Nombre, PersonaApellido=pe.Apellido, TribuNombre= tr!=null? tr.NombreTribu:string.Empty }; |
CASO RIGHT JOIN
Queremos obtener el nombre de todas las tribus, tengan o no personas asociadas, y el nombre y apellido de las personas de cada tribu.
1 2 3 |
Select Pe.Nombre, Pe.Apellido, Tr.NombreTribu from Persona Pe right join Tribu tr on Pe.IdTribu=Tr.IdTribu |
En Linq sería:
1 2 3 4 5 6 7 8 9 |
from tr in ListaTribus join pe in ListaPersonas on tr.IdTribu equals pe.IdTribu into UnionTribuPersona from tr in UnionTribuPersona.DefaultIfEmpty() select new { PersonaNombre=pe!=null?pe.Nombre:string.Empty , PersonaApellido=pe!=null?pe.Apellido:string.Empty, TribuNombre= tr.NombreTribu } |
NOTA: Ojo debes comprobar si el valor es null (tr!=null, pe!=null), sino obtendrás el error:referencia a objeto no establecida como instancia de un objeto
Pingback: MASANASA - Linq consulta de varias tablas devolver un listado de un modelo MVC