LINQ SelectMany

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 tipo IEnumerable<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
8Linguagem 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 Employeeclasse com duas propriedades Namee Skills. A Skillspropriedade é 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
ExpressLinguagem 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.

Deixe um comentário

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