Capítulo 16: LINQ (Consultas Poderosas) 🔍🦸‍♂️

Neste capítulo, vamos aprender sobre o LINQ (Language Integrated Query), um dos recursos mais incríveis do C# que permite fazer buscas e filtros em listas de forma muito simples, com o tema Marvel!


📖 O que é LINQ?

O LINQ permite que você faça “perguntas” para as suas coleções de dados (como listas) usando uma sintaxe que lembra o SQL (banco de dados) ou usando métodos encadeados. Em vez de fazer vários laços for e if para filtrar uma lista, você faz isso em uma única linha!


📖 Exemplo Guiado: Filtrando Heróis Poderosos

Vamos criar uma lista de heróis e usar o LINQ para encontrar apenas aqueles com nível de poder acima de 90.

  1. Crie o arquivo marvel_linq.cs na pasta src/:
using System;
using System.Collections.Generic;
using System.Linq; // Necessário para usar o LINQ!
 
// Criando a lista
List<Heroi> herois = new List<Heroi> {
    new Heroi("Homem de Ferro", 92),
    new Heroi("Capitao America", 85),
    new Heroi("Thor", 98),
    new Heroi("Hulk", 99),
    new Heroi("Viuva Negra", 70)
};
 
// Usando LINQ para filtrar e ordenar
// "Onde o poder for maior que 90, ordene por poder caindo"
var heroisPoderosos = herois
    .Where(h => h.Poder > 90)
    .OrderByDescending(h => h.Poder);
 
Console.WriteLine("--- Heróis de Elite (Poder > 90) ---");
foreach (var h in heroisPoderosos) {
    Console.WriteLine($"{h.Nome} - Poder: {h.Poder}");
}
 
public class Heroi {
    public string Nome { get; set; }
    public int Poder { get; set; }
 
    public Heroi(string nome, int poder) {
        Nome = nome;
        Poder = poder;
    }
}

🕹️ Como Executar e Testar no VS Code

  1. Execute o projeto usando dotnet run.

Resultado Esperado:

--- Heróis de Elite (Poder > 90) ---
Hulk - Poder: 99
Thor - Poder: 98
Homem de Ferro - Poder: 92

📊 Ilustração Visual: Fluxo do LINQ

O LINQ funciona como um funil:

graph TD
    A[Lista Completa] --> B["Filtro (Where)"]
    B --> C["Ordenação (OrderBy)"]
    C --> D[Resultado Final]

🛠️ Prática Obrigatória 1: Buscando por Nome

Use a mesma lista de heróis do exemplo. Use o método .Where() do LINQ para encontrar apenas os heróis cujo nome contenha a palavra “Homem”. Exiba o resultado na tela! (Dica: use h.Nome.Contains("Homem")).


🔑 Gabarito de Código

Prática 1: busca_linq.cs

using System;
using System.Collections.Generic;
using System.Linq;
 
List<Heroi> herois = new List<Heroi> {
    new Heroi("Homem de Ferro", 92),
    new Heroi("Capitao America", 85),
    new Heroi("Thor", 98),
    new Heroi("Hulk", 99),
    new Heroi("Viuva Negra", 70)
};
 
var homens = herois.Where(h => h.Nome.Contains("Homem"));
 
Console.WriteLine("--- Heróis com 'Homem' no nome ---");
foreach (var h in homens) {
    Console.WriteLine(h.Nome);
}
 
public class Heroi {
    public string Nome { get; set; }
    public int Poder { get; set; }
    public Heroi(string nome, int poder) {
        Nome = nome;
        Poder = poder;
    }
}

Capitulo Anterior | Proximo Capitulo