terça-feira, 17 de fevereiro de 2026

Como aplicar filtros usando consultas LINQ

 

Neste artigo, vamos explorar em profundidade como utilizar consultas LINQ para aplicar filtros em coleções de dados dentro de aplicações .NET. LINQ, sigla para Language Integrated Query (Consulta Integrada à Linguagem), é um conjunto poderoso de recursos que permite consultar, transformar e manipular dados de forma declarativa diretamente no código, usando C# ou Visual Basic.

Com LINQ, você consegue escrever consultas expressivas e legíveis, reduzindo a complexidade e evitando loops manuais extensos. Isso torna o código mais limpo, fácil de manter e menos propenso a erros.

Ao longo deste guia, você aprenderá:

  • O que é LINQ e como funciona

  • Estrutura de uma consulta LINQ

  • Diferença entre sintaxe de consulta e sintaxe de método

  • Como filtrar, projetar e ordenar dados

  • Boas práticas e exemplos práticos


O que é LINQ?

LINQ é uma tecnologia que integra recursos de consulta diretamente na linguagem, permitindo trabalhar com diferentes fontes de dados como:

  • Arrays

  • Listas

  • Dicionários

  • Coleções em memória

  • Bancos de dados

  • XML

  • APIs

Ele funciona sobre qualquer tipo que implemente a interface IEnumerable ou IQueryable.

A grande vantagem é que você escreve consultas com uma sintaxe consistente, independente da fonte de dados.


Estrutura de uma consulta LINQ

Uma consulta LINQ normalmente possui três partes principais:

1️⃣ Fonte de dados

É a coleção onde os dados serão consultados.

2️⃣ Critérios de filtragem

Condições que definem quais elementos serão selecionados.

3️⃣ Projeção dos resultados

Define como os dados serão retornados ou transformados.


Exemplo prático com classe Produto

Vamos considerar uma classe que representa produtos de uma loja online:

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

Suponha que temos uma lista:

List<Produto> produtos = new List<Produto>();

Filtrando usando sintaxe de consulta

Queremos selecionar livros que custam menos de 50 reais:

var livrosBaratos = from p in produtos where p.Categoria == "Livros" && p.Preco < 50 select p;

O que acontece aqui:

  • from define a fonte

  • where aplica o filtro

  • select define o retorno

Essa sintaxe lembra SQL, sendo ótima para leitura.


Iterando os resultados

foreach (var livro in livrosBaratos) { Console.WriteLine($"{livro.Nome} - {livro.Preco:C}"); }

A consulta retorna IEnumerable<Produto>, permitindo iteração ou conversão para lista.


Sintaxe de método (Method Syntax)

A mesma consulta pode ser escrita assim:

var livrosBaratos = produtos .Where(p => p.Categoria == "Livros" && p.Preco < 50) .Select(p => p);

Aqui usamos métodos de extensão da classe Enumerable.

Componentes:

  • Where → filtro

  • Select → projeção

Essa abordagem é muito usada no dia a dia por ser mais flexível.


Ordenando resultados

Podemos ordenar por preço:

var livrosBaratos = produtos .Where(p => p.Categoria == "Livros" && p.Preco < 50) .OrderBy(p => p.Preco) .Select(p => p);

Outros métodos úteis:

  • OrderByDescending

  • ThenBy

  • ThenByDescending


Métodos LINQ importantes

Alguns métodos muito usados:

MétodoFunção
FirstPrimeiro elemento
FirstOrDefaultPrimeiro ou nulo
SingleElemento único
CountContagem
SumSoma
AverageMédia
Min / MaxValores extremos
GroupByAgrupamento
DistinctRemove duplicados
JoinCombinação de coleções

Execução adiada (Deferred Execution)

Uma característica importante do LINQ é a execução adiada.

A consulta só é executada quando você:

  • Itera com foreach

  • Usa ToList()

  • Usa ToArray()

  • Chama métodos agregadores

Exemplo:

var consulta = produtos.Where(p => p.Preco < 50); // ainda não executou var lista = consulta.ToList(); // executa aqui

Isso melhora performance e flexibilidade.


Boas práticas com LINQ

✅ Prefira consultas legíveis
✅ Evite consultas muito complexas em uma linha
✅ Use ToList() quando precisar materializar dados
✅ Evite múltiplas iterações desnecessárias
✅ Use nomes claros nas lambdas


Quando usar LINQ?

LINQ é ideal para:

  • Filtragem de dados

  • Transformações

  • Relatórios

  • Manipulação de coleções

  • Consultas em memória

  • APIs e backend


Conclusão

Neste artigo, aprendemos como aplicar filtros usando consultas LINQ e entendemos suas principais estruturas e abordagens. Exploramos tanto a sintaxe de consulta quanto a sintaxe de método, além de exemplos práticos com filtragem e ordenação.

LINQ é uma ferramenta essencial para qualquer desenvolvedor .NET, pois permite escrever código mais declarativo, expressivo e eficiente. Dominar LINQ significa aumentar sua produtividade e melhorar significativamente a qualidade do código.

Continue praticando e explorando métodos avançados — quanto mais você usa LINQ, mais natural ele se torna.


Introdução e Fundamentos da Programação em C

 


1. O que é a Linguagem C?

A linguagem C é uma linguagem de programação de propósito geral, desenvolvida por Dennis Ritchie no início dos anos 1970. É amplamente utilizada para desenvolvimento de sistemas operacionais, compiladores e outras aplicações de baixo nível devido à sua eficiência e controle sobre o hardware.

2. Estrutura Básica de um Programa em C

Todo programa em C segue uma estrutura básica. Aqui está um exemplo simples de um programa “Hello, World!”:

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}
  • #include <stdio.h>: Esta linha inclui a biblioteca padrão de entrada e saída.
  • int main() { ... }: A função main é o ponto de entrada do programa.
  • printf("Hello, World!\n");: Esta linha imprime “Hello, World!” na tela.
  • return 0;: Indica que o programa terminou com sucesso.

3. Tipos de Dados

Os tipos de dados em C são categorizados em várias classes:

  • Tipos Básicosintcharfloatdouble
  • Modificadores de Tiposhortlongsignedunsigned
  • Tipos Derivados: Arrays, Ponteiros, Estruturas, Uniões
  • Tipos Enumeradosenum

Exemplo de declaração de variáveis:

int idade = 25;
char letra = 'A';
float altura = 1.75;
double peso = 70.5;

4. Operadores

Os operadores em C são usados para realizar operações em variáveis e valores. Eles são classificados em várias categorias:

  • Aritméticos+-*/%
  • Relacionais==!=><>=<=
  • Lógicos&&||!
  • Bitwise&|^~<<>>
  • Atribuição=+=-=*=/=%=
  • Outrossizeof& (endereço), * (ponteiro)

Exemplo de uso de operadores:

int a = 10, b = 20;
int soma = a + b; // soma é 30
int diferenca = a - b; // diferenca é -10
int produto = a * b; // produto é 200
int quociente = b / a; // quociente é 2
int resto = b % a; // resto é 0

5. Estruturas de Controle

As estruturas de controle são usadas para controlar o fluxo de execução do programa:

  • Condicionaisifelse ifelseswitch
  • Loopsforwhiledo-while

Exemplo de estrutura condicional:

int numero = 10;

if (numero > 0) {
    printf("Número positivo\n");
} else if (numero < 0) {
    printf("Número negativo\n");
} else {
    printf("Zero\n");
}

Exemplo de loop:

for (int i = 0; i < 5; i++) {
    printf("i = %d\n", i);
}

6. Funções

Funções são blocos de código que realizam uma tarefa específica e podem ser reutilizadas. A declaração de uma função inclui o tipo de retorno, o nome da função e os parâmetros (se houver).

Exemplo de função:

#include <stdio.h>

void saudacao() {
    printf("Olá, Mundo!\n");
}

int main() {
    saudacao();
    return 0;
}

Conclusão

Esses são os fundamentos básicos da programação em C. Compreender esses conceitos é essencial para avançar em tópicos mais complexos e desenvolver programas eficientes. Se precisar de mais detalhes ou tiver alguma dúvida específica, sinta-se à vontade para perguntar!

Você gostaria de explorar algum desses tópicos com mais profundidade?