0Pricing
C# Academy · Aula

SELECT e projeção

Transforme os dados em novos formatos

SELECT e projeção é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.

O que significa projeção

Select transforma cada elemento de uma sequência em um novo formato. Isso é chamado de projeção.

Ele recebe uma função anônima que mapeia um elemento para um resultado e retorna uma sequência desses resultados, sem alterar a fonte.

using System;
using System.Linq;

int[] nums = { 1, 2, 3, 4 };
var squares = nums.Select(n => n * n);
Console.WriteLine(string.Join(", ", squares));

Alterando o tipo

A projeção pode alterar completamente o tipo dos elementos. Mapear int para string produz um IEnumerable<string>.

O tipo de saída é inferido a partir do tipo de retorno da função anônima, então o compilador o acompanha para você.

using System;
using System.Linq;

int[] nums = { 10, 20, 30 };
var labels = nums.Select(n => $"Item #{n}");
foreach (var l in labels) Console.WriteLine(l);

Projetando propriedades

Um uso frequente é extrair uma única propriedade dos objetos. Select(p => p.Name) transforma uma lista de objetos em uma lista de nomes.

Isso reduz os dados ao necessário antes de um processamento adicional ou da exibição.

using System;
using System.Linq;
using System.Collections.Generic;

record User(string Name, int Age);
var users = new List<User> { new("Ana", 30), new("Bo", 25) };
var names = users.Select(u => u.Name);
Console.WriteLine(string.Join(", ", names));

Resultados de tipo anônimo

Você pode projetar em um tipo anônimo para manter vários campos juntos. Use new { ... } dentro da função anônima.

O compilador gera uma classe dinamicamente, com propriedades somente leitura, ideal para dar forma a resultados intermediários.

using System;
using System.Linq;
using System.Collections.Generic;

record User(string Name, int Age);
var users = new List<User> { new("Ana", 30), new("Bo", 25) };
var shaped = users.Select(u => new { u.Name, IsAdult = u.Age >= 18 });
foreach (var s in shaped) Console.WriteLine($"{s.Name}:{s.IsAdult}");

Select com índice

Assim como Where, Select tem uma sobrecarga que expõe o índice baseado em zero. A função anônima recebe (element, index).

Isso é perfeito para numerar elementos ou associar cada valor à sua posição.

using System;
using System.Linq;

string[] tasks = { "Wake", "Eat", "Code" };
var numbered = tasks.Select((t, i) => $"{i + 1}. {t}");
foreach (var n in numbered) Console.WriteLine(n);

Select na sintaxe de consulta

Na sintaxe de consulta, a cláusula select faz a projeção. Você pode selecionar o próprio elemento ou qualquer expressão baseada nele.

Combine-a com where para filtrar e dar forma aos dados em uma única consulta legível.

using System;
using System.Linq;

int[] nums = { 1, 2, 3, 4, 5 };
var result = from n in nums
             where n % 2 == 1
             select n * 10;
Console.WriteLine(string.Join(", ", result));

SelectMany achata sequências

Quando cada elemento é mapeado para uma coleção, Select produziria uma sequência de sequências. SelectMany achata essas sequências em uma única sequência.

Ele é o equivalente, no LINQ, a um laço aninhado que concatena os resultados internos.

using System;
using System.Linq;
using System.Collections.Generic;

var groups = new List<int[]> { new[] {1, 2}, new[] {3, 4} };
var flat = groups.SelectMany(g => g);
Console.WriteLine(string.Join(", ", flat));

A projeção também é adiada

Select segue o modelo de execução adiada. A função anônima de mapeamento só é executada quando a sequência é enumerada.

Assim, criar uma projeção é barato; o trabalho acontece quando você percorre ou materializa o resultado.

using System;
using System.Linq;

int runs = 0;
int[] nums = { 1, 2, 3 };
var q = nums.Select(n => { runs++; return n; });
Console.WriteLine($"Before: {runs}");
foreach (var _ in q) { }
Console.WriteLine($"After: {runs}");

Filtrar e depois projetar

A ordem é importante para obter clareza e eficiência: filtre primeiro com Where e depois faça a projeção com Select, para transformar somente os elementos que serão mantidos.

Esse fluxo de processamento pode ser lido de cima para baixo e evita trabalho desnecessário de projeção.

using System;
using System.Linq;

int[] nums = { 1, 2, 3, 4, 5, 6 };
var result = nums.Where(n => n % 2 == 0)
                 .Select(n => n * n);
Console.WriteLine(string.Join(", ", result));

Projetando para um registro novo

Em vez de tipos anônimos, você pode projetar para um tipo nomeado ou um record. Isso é útil quando os resultados atravessam os limites de um método, pois tipos anônimos não podem ser retornados com um nome conhecido.

Essa também é a forma de criar objetos de transferência de dados a partir de objetos de domínio mais ricos.

using System;
using System.Linq;
using System.Collections.Generic;

record User(string Name, int Age);
record Summary(string Name);
var users = new List<User> { new("Ana", 30) };
var dtos = users.Select(u => new Summary(u.Name));
foreach (var d in dtos) Console.WriteLine(d.Name);

Select preserva a ordem e a quantidade

Ao contrário de Where, Select nunca adiciona nem remove elementos — ele faz um mapeamento de um para um. A saída tem a mesma quantidade e a mesma ordem da entrada.

Se precisar de menos elementos, filtre; se precisar de mais elementos a partir de cada um, use SelectMany.

using System;
using System.Linq;

int[] nums = { 5, 1, 9 };
var doubled = nums.Select(n => n * 2);
Console.WriteLine($"In:{nums.Length} Out:{doubled.Count()}");

Verificação rápida

Escolha o operador adequado para cada tarefa.

Recapitulação

Select projeta cada elemento em um novo formato — uma propriedade, uma cadeia de caracteres, um tipo anônimo ou um registro — preservando a quantidade e a ordem em uma relação de um para um. Ele tem uma sobrecarga com índice e sua execução é adiada.

SelectMany achata sequências aninhadas. A seguir, classificaremos e agruparemos os dados aos quais demos forma.

Perguntas Frequentes

A aula “SELECT e projeção” é grátis?

Sim — o texto completo de “SELECT e projeção” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.

O que vou aprender em “SELECT e projeção”?

Transforme os dados em novos formatos Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “SELECT e projeção”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. WHERE e filtragem
  2. SELECT e projeção
  3. OrderBy e agrupamento
  4. Agregações e ToList
← Voltar para C# Academy