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.
- Crie o arquivo
marvel_linq.csna pastasrc/:
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
- 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;
}
}