Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Left join e Right Join em linq

Como realizar uma consulta como Left join e Right Join em linq, para trazer apenas os dados não relacionados Exemplo:

var CursosNaoRealizados =
  from a in Alunos
  join c in Cursos on a.CursoId equals c.CursoId into juncao
 from j in juncao.DefaultIfEmpty()
select j;

Queria trazer apenas os cursos que o aluno não foi matriculado.

3 respostas
solução!

Oi Luiz!

Nesse caso você precisa inverter a ordem das origens de dados (Cursos join Alunos, em vez de Alunos join Cursos), uma vez que o LINQ suporta left outer join, mas não right outer join.

A query abaixo vai trazer todos os cursos sem nenhum aluno matriculado:

var CursosNaoRealizados =
from c in Cursos 
join a in Alunos
    on c.CursoId equals a.CursoId into juncao
from j in juncao.DefaultIfEmpty()
select c;

Entretanto, se você quiser trazer os cursos em que um determinado aluno não está matriculado, podemos filtrar os alunos com uma expressão lambda:

int meuAlunoId = 12345;

var CursosNaoRealizados =
from c in Cursos
join a in Alunos.Where(a => a.AlunoId == meuAlunoId)
    on c.CursoId equals a.CursoId into juncao
from j in juncao.DefaultIfEmpty()
select c;

Boa tarde Marcelo! Muito obrigado pela ajuda e por tirar essas dúvidas, muito bom o curso. Abraços...

Fico feliz que tenha gostado, Luiz, e muito obrigado pela sua participação!

Um abraço!