LINQ UnionBy

Resumo : neste tutorial, você aprenderá como usar o UnionBy()método LINQ para criar uma união de duas sequências com base em uma função de seletor de chave.

Introdução ao método LINQ UnionBy()

O UnionBy()método pega duas sequências e retorna uma união definida delas com base em uma função de seletor de chave especificada.

Aqui está a sintaxe do UnionBy()método:

IEnumerable<TSource> UnionBy<TSource,TKey> (
    this IEnumerable<TSource> first, 
    IEnumerable<TSource> second, 
    Func<TSource,TKey> keySelector
);Linguagem de código:  C#  ( cs )

Nesta sintaxe:

  • TSourcerepresenta o tipo de elementos das sequências de entrada enquanto TKeyé o tipo de chave usada para identificar os elementos.
  • firste secondsão sequências de entrada com o tipo IEnumerable<T>.
  • keySelectoré uma função para extrair a chave de cada elemento.

O UnionBy()método retorna uma sequência IEnumerable<T>que contém elementos exclusivos da primeira e da segunda sequências.

Normalmente, você usa o UnionBy()método para criar uma união definida de sequências de tipos personalizados. Para os tipos primitivos, você deve usar o Union()método.

Exemplo do método LINQ UnionBy()

Suponha que você tenha uma Personclasse com duas propriedades SSNe Name:

public class Person
{
    public required string SSN { get; set; }
    public required string Name { get; set; }
    public override string ToString() => $"{Name} <{SSN}>";
}Linguagem de código:  C#  ( cs )

Para criar uma união de duas listas de Personobjetos, você deve definir um comparador de igualdade personalizado e passá-lo para o Union()método.

No entanto, se você usar o UnionBy()método, não precisará de um comparador de igualdade personalizado, pois poderá usar a função de seletor de chave para especificar qual propriedade do Personobjeto será usada para comparação.

Por exemplo:

using static System.Console;

var team1 = new List<Person>
{
    new Person() { SSN="123456781", Name="John Doe" },
    new Person() { SSN="123456782", Name="Jane Doe" },
    new Person() { SSN="123456783", Name="William Brown" },
};

var team2 = new List<Person>
{
    new Person() { SSN="123456781", Name="John Doe" },
    new Person() { SSN="123456784", Name="Sarah Davis" },
};

var team = team1.UnionBy(team2, p => p.SSN);

foreach (var person in team)
{
    WriteLine(person);
}Linguagem de código:  C#  ( cs )

Saída:

John Doe <123456781>
Jane Doe <123456782>
William Brown <123456783>
Sarah Davis <123456784>Linguagem de código:  C#  ( cs )

Neste exemplo, a função do seletor de chave:

p => p.SSNLinguagem de código:  C#  ( cs )

especifica que UnionBy()deve usar o SSNdo Personobjeto para comparar os Personobjetos.

Resumo

  • Use o método LINQ UnionBy()para criar uma união de duas sequências com base em uma função de seletor de chave.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *