Resumo : neste tutorial, você aprenderá como usar o SelectMany()
método LINQ para transformar itens de uma sequência em uma única sequência plana.
Introdução ao método LINQ SelectMany()
O SelectMany()
método pega uma sequência de itens, realiza uma transformação em cada item e gera uma nova sequência de itens para cada item de entrada. Finalmente, combina todas as sequências imediatas geradas em uma única sequência achatada.
Aqui está a sintaxe do SelectMany()
método:
public IEnumerable<TResult> SelectMany<TSource,TResult> (
this IEnumerable<TSource> source,
Func<TSource,IEnumerable<TResult>> selector
);
Linguagem de código: C# ( cs )
Nesta sintaxe:
source
– é a sequência de itens com tipoIEnumerable<TSource>
a ser transformado.selector
– é uma função de transformação que se aplica a cada elemento da sequência de origem.
Método LINQ SelectMany()
Vejamos alguns exemplos de uso do SelectMany()
método.
1) Usando o método LINQ SelectMany() para nivelar uma lista de arrays de inteiros
O exemplo a seguir usa o SelectMany()
método para nivelar uma lista de uma matriz de números inteiros e retornar a IEnumerable<int>
:
using static System.Console;
var numbers = new List<int[]>()
{
new int[] { 1, 2 },
new int[] { 3, 4, 5,},
new int[] { 6, 7, 8}
};
var results = numbers.SelectMany(x => x);
foreach (var number in results)
{
WriteLine(number);
}
Linguagem de código: C# ( cs )
Objetos
1
2
3
4
5
6
7
8
Linguagem de código: C# ( cs )
2) Usando o método LINQ SelectMany() para nivelar uma lista de arrays de strings
Suponha que você tenha uma Employee
classe com duas propriedades Name
e Skills
. A Skills
propriedade é uma lista de strings que representam as habilidades dos funcionários.
public class Employee
{
public string Name { get; set;}
public List<string> Skills { get; set;}
public Employee(string name, List<string> skills)
{
Name = name;
Skills = skills;
}
}
Linguagem de código: C# ( cs )
O programa a seguir usa SelectMany()
para obter todas as habilidades de todos os funcionários de uma lista:
using static System.Console;
var employees = new List<Employee>()
{
new Employee
(
name: "John Doe",
skills: new List<string> {"C#","ASP.NET Core","Rest API"}
),
new Employee
(
name: "Jane Doe",
skills: new List<string> {"Python","Django","Fast API"}
),
new Employee
(
name: "Alice Miller",
skills: new List<string> {"JavaScript","Node.js","Express"}
),
};
var skills = employees.SelectMany(e => e.Skills);
foreach (var skill in skills)
{
WriteLine(skill);
}
Linguagem de código: C# ( cs )
Saída:
C#
ASP.NET Core
Rest API
Python
Django
Fast API
JavaScript
Node.js
Express
Linguagem de código: C# ( cs )
Resumo
- Use o método LINQ
SelectMany()
para criar uma única sequência nivelada transformando itens de outra sequência.