Help with join in lambda query

2

I have the classes:

profissional
{
    int id;
    int idUnidade;
    string nome;
}

unidade
{
    int id;
    string nome;
}

profissionalUnidade
{
    string profissionalNome;
    string unidadeNome;
}

I'm doing a query like this:

listaProfissionalUnidade = (from p in profissionais
join u in unidades on p.idUnidade = u.id
select new profissionalUnidade()
{
    profissionalNome = p.nome,
    unidadeNome = u.nome
}).ToList();

So, he lists me all the professionals that have some bond with a unit. However, I also need to be returned to me, professionals who have no links.

How do I do it?

    
asked by anonymous 12.07.2017 / 20:15

1 answer

2

Use left join , this would look like this.

listaProfissionalUnidade = (from p in profissionais
join u in unidades on p.idUnidade = u.id into u1
from u2 in u1.DefaultIfEmpty()
select new profissionalUnidade()
{
    profissionalNome = p.nome,
    unidadeNome = u2 == null ? "" : u2.nome
}).ToList();

That is, linq play the result of its u in u1 and if it does not find a corresponding value in the other table it creates a null object using DefaultIfEmpty .

As discussed below, you pretty much just need to do the replay of the excerpt below.

join u in unidades on p.idUnidade = u.id into u1
from u2 in u1.DefaultIfEmpty()

ie

join u in unidades on p.idUnidade = u.id into u1
from u2 in u1.DefaultIfEmpty()
join l in unidades on u.idOutraUnidade = l.id into l1
from l2 in l1.DefaultIfEmpty()
    
12.07.2017 / 20:23