top of page
  • Foto do escritorFábio Henrique

LINQ left Join

Fazer left join em uma query linq requer um "paranauê" um pouco diferente e é isso que vou mostrar neste post.


Um left join é quando retornamos todos os elementos da primeira coleção de dados não importando se estes possuem relação com os elementos da segunda coleção.


Hands On


O primeiro passo para fazer o left join em uma query linq é fazer um join e armazenar o resultado dele em uma variável através do uso da keyword into.

No exemplo abaixo foi feito o join entre a lista de Pessoas e a lista de Carros com base em um objeto Person que corresponde a Car.Owner


O segundo passo é incluir cada elemento da primeira coleção (left) no resultado, mesmo que estes não tenham relação com os elementos da segunda coleção (right). Isso é feito através do método DefaultIfEmpty. Este método retorna um valor padrão para os elementos que não possuem correspondência garantindo que os mesmos sejam retornados pela consulta.


class Person
{
   public string Name { getset; }
   public string Nickname { getset; }
}

class Car
{
   public string Brand { getset; }
   public Person Owner { getset; }
}

Person fabio = new Person { Name = "Fábio"Nickname = "Febola" };
Person diogo = new Person { Name = "Diogo"Nickname = "Diogro" };
Person wellington = new Person { Name = "Wellington"Nickname = "Leitão" };
Person lucas = new Person { Name = "Lucas"Nickname = "Costinha" };

Car honda = new Car { Brand = "Honda"Owner = diogo };
Car nissan = new Car { Brand = "Nissan"Owner = wellington };
Car ford = new Car { Brand = "Ford"Owner = lucas };


// Create two lists.
List<Personpeople = new List<Person> {fabiodiogowellingtonlucas };
List<Carcars = new List<Car> { hondanissanford };

var query = from person in people
            join car in cars on person equals car.Owner into gj
            from subcar in gj.DefaultIfEmpty()
            select new { 
                         person.Name,
                         CarBrand = subcar?.Brand ?? String.Empty 
             };

foreach (var v in query)
{
    Console.WriteLine($"{v.Name + ":",-15}{v.CarBrand}");
}

// This code produces the following output:
// Fábio:
// Diogo:         Honda
// Wellington:    Nissan
// Lucas:         Ford

473 visualizações0 comentário

Posts recentes

Ver tudo

Comments


bottom of page