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:
TSource
representa o tipo de elementos das sequências de entrada enquantoTKey
é o tipo de chave usada para identificar os elementos.first
esecond
são sequências de entrada com o tipoIEnumerable<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 Person
classe com duas propriedades SSN
e 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 Person
objetos, 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 Person
objeto 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.SSN
Linguagem de código: C# ( cs )
especifica que UnionBy()
deve usar o SSN
do Person
objeto para comparar os Person
objetos.
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.