Da trilha de C# Este conceito ainda não saiu como card do dia. ir para o card de hoje

C# Coleções Intermediário

LINQ

LINQ (Language Integrated Query) é um conjunto de recursos do C# que permite consultar coleções de forma declarativa e fortemente tipada. Com LINQ, você escreve consultas parecidas com SQL diretamente no código, usando métodos de extensão como Where, Select, OrderBy e GroupBy.

A grande vantagem é a execução adiada: a consulta só é executada quando você itera sobre o resultado (por exemplo, com foreach ou chamando ToList()). Isso permite compor consultas complexas de forma eficiente e legível.

Além da sintaxe de métodos, o C# oferece a sintaxe de consulta (query syntax), que usa palavras-chave como from, where, select, orderby e group. Ambas são equivalentes e podem ser combinadas.

Neste card, você vai aprender a filtrar, projetar, ordenar, agrupar e entender quando a consulta é realmente executada.

Pontos-chave

  • Where filtra elementos; Select transforma cada elemento; OrderBy/ThenBy ordenam a sequência.
  • GroupBy agrupa elementos por uma chave e retorna uma sequência de grupos (IGrouping<TKey, TElement>).
  • A sintaxe de consulta (from ... where ... select) é traduzida para chamadas de método pelo compilador.
  • LINQ usa execução adiada: a consulta só roda quando você itera sobre ela ou chama um operador de agregação.
  • Métodos como ToList(), ToArray(), Count() e First() forçam a execução imediata.
LinqDemo.cs
using System;
using System.Linq;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var produtos = new List<Produto>
        {
            new Produto { Nome = "Teclado", Categoria = "Informática", Preco = 120.0m },
            new Produto { Nome = "Mouse", Categoria = "Informática", Preco = 80.0m },
            new Produto { Nome = "Cadeira", Categoria = "Móveis", Preco = 450.0m },
            new Produto { Nome = "Mesa", Categoria = "Móveis", Preco = 800.0m },
            new Produto { Nome = "Monitor", Categoria = "Informática", Preco = 900.0m }
        };

        // Consulta com sintaxe de método: filtra, ordena e projeta
        var caros = produtos
            .Where(p => p.Preco > 100)
            .OrderBy(p => p.Preco)
            .Select(p => $"{p.Nome} - R$ {p.Preco:F2}");

        Console.WriteLine("Produtos acima de R$ 100 (ordenados por preço):");
        foreach (var item in caros)
            Console.WriteLine(item);

        // Agrupamento por categoria com sintaxe de consulta
        var porCategoria = from p in produtos
                           group p by p.Categoria into g
                           select new { Categoria = g.Key, Total = g.Count(), Media = g.Average(p => p.Preco) };

        Console.WriteLine("\nResumo por categoria:");
        foreach (var grupo in porCategoria)
            Console.WriteLine($"{grupo.Categoria}: {grupo.Total} itens, média R$ {grupo.Media:F2}");

        // Execução adiada: a consulta só roda no foreach
        var consulta = produtos.Where(p => p.Preco > 500);
        produtos.Add(new Produto { Nome = "Notebook", Categoria = "Informática", Preco = 3500.0m });
        Console.WriteLine("\nProdutos acima de R$ 500 (inclui novo item):");
        foreach (var p in consulta)
            Console.WriteLine(p.Nome);
    }
}

class Produto
{
    public string Nome { get; set; }
    public string Categoria { get; set; }
    public decimal Preco { get; set; }
}

Exercícios

  1. 1
    Fácil

    Filtrar e ordenar números

    Dada uma lista de números inteiros, use LINQ para obter apenas os números pares, ordenados de forma crescente, e exiba cada um em uma linha.

    Resolver
  2. 2
    Médio

    Agrupar vendas por vendedor

    Dada uma lista de vendas com Vendedor e Valor, use LINQ para agrupar as vendas por vendedor e exibir, para cada vendedor, o total vendido e a quantidade de vendas. Ordene os grupos pelo total decrescente.

    Resolver
  3. 3
    Desafio

    Relatório de vendas com execução adiada

    Crie um programa que demonstre a execução adiada do LINQ. Dada uma lista de vendas, monte uma consulta que filtre vendas acima de um valor mínimo e projete o nome do vendedor e o valor. Antes de iterar, adicione uma nova venda que atenda ao filtro. Exiba o resultado e comprove que a nova venda aparece. Em seguida, use GroupBy para agrupar por vendedor e mostrar o total, ordenado pelo total decrescente.

    Resolver

Continue estudando