10 Truques de LINQ que Todo Programador C# Deve Saber
O que são LINQ no C#?
Imagine que você tem uma caixa cheia de brinquedos e quer encontrar os carrinhos de corrida vermelhos. LINQ (Language Integrated Query) é como um superpoder que te ajuda a procurar, organizar e brincar com os dados de um jeito fácil e rápido no C#. Ele funciona em listas, bancos de dados e até em arquivos XML!
Quais são os métodos do LINQ?
Os métodos LINQ são como ferramentas mágicas que te ajudam a encontrar, escolher e organizar os brinquedos na sua caixa. Vamos ver alguns deles abaixo que são super legais!
1.Filtrando com Where O método Where é como uma peneira que filtra dados de acordo com uma condição. Por exemplo:
//csharp
var numeros = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var numerosPares = numeros.Where(num => num % 2 == 0);
// Saída: 2, 4, 6, 8, 10
Console.WriteLine(string.Join(", ", numerosPares));
2.Ordenando com OrderBy e OrderByDescending Você pode ordenar dados de forma crescente ou decrescente usando OrderBy e OrderByDescending. Exemplo:
//csharp
var numeros = new List<int> { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
var numerosOrdenados = numeros.OrderBy(num => num);
// Saída: 1, 1, 2, 3, 3, 4, 5, 5, 6, 9
Console.WriteLine(string.Join(", ", numerosOrdenados));
3.Selecionando com Select O método Select serve para escolher quais propriedades ou transformações aplicar em cada elemento. Por exemplo:
//csharp
var pessoas = new List<Pessoa> { new Pessoa { Nome = "Ana", Idade = 25 }, new Pessoa { Nome = "João", Idade = 30 } };
var nomes = pessoas.Select(pessoa => pessoa.Nome);
// Saída: Ana, João
Console.WriteLine(string.Join(", ", nomes));
4.Agregando com Sum, Average, Min e Max Esses métodos são usados para calcular somas, médias, valores mínimos e máximos em uma coleção de números. Exemplo:
//csharp
var numeros = new List<int> { 1, 2, 3, 4, 5 };
var soma = numeros.Sum();
// Saída: 15
Console.WriteLine(soma);
5.Agrupando com GroupBy GroupBy ajuda a agrupar dados com base em uma chave específica. Por exemplo, agrupando pessoas por idade:
//csharp
var pessoas = new List<Pessoa> { new Pessoa { Nome = "Ana", Idade = 25 }, new Pessoa { Nome = "João", Idade = 30 } };
var gruposDeIdade = pessoas.GroupBy(pessoa => pessoa.Idade);
// Saída:
// Key: 25, Values: Ana
// Key: 30, Values: João
foreach (var grupo in gruposDeIdade)
{
Console.WriteLine($"Key: {grupo.Key}, Values: {string.Join(", ", grupo.Select(p => p.Nome))}");
}
6.Unindo com Join Join combina dados de duas fontes diferentes com base em uma condição. Por exemplo, unindo listas de alunos e cursos:
//csharp
var alunos = new List<Aluno> { new Aluno { Nome = "Maria", CursoId = 1 }, new Aluno { Nome = "Pedro", CursoId = 2 } };
var cursos = new List<Curso> { new Curso { Id = 1, Nome = "Matemática" }, new Curso { Id = 2, Nome = "História" } };
var alunosECursos = alunos.Join(cursos, aluno => aluno.CursoId, curso => curso.Id, (aluno, curso) => new { aluno.Nome, curso.Nome });
// Saída: { Nome = Maria, Nome = Matemática }, { Nome = Pedro, Nome = História }
foreach (var item in alunosECursos)
{
Console.WriteLine($"{{ Nome = {item.Nome}, Curso = {item.Nome} }}");
}
7.Convertendo com ToList, ToDictionary e ToArray Esses métodos convertem o resultado de uma consulta LINQ em diferentes tipos de coleções. Exemplo:
//csharp
var pessoas = new List<Pessoa> { new Pessoa { Nome = "Ana" }, new Pessoa { Nome = "João" } };
var listaDeNomes = pessoas.Select(pessoa => pessoa.Nome).ToList();
// Saída: Ana, João
Console.WriteLine(string.Join(", ", listaDeNomes));
8.Excluindo Duplicatas com Distinct Distinct remove elementos duplicados de uma coleção. Por exemplo:
//csharp
var numeros = new List<int> { 1, 2, 2, 3, 4, 4, 5 };
var numerosDistintos = numeros.Distinct();
// Saída: 1, 2, 3, 4, 5
Console.WriteLine(string.Join(", ", numerosDistintos));
9.Verificando Condições com Any, All e Contains Esses métodos ajudam a verificar se elementos existem, se todos os elementos satisfazem uma condição ou se uma coleção contém um determinado elemento. Exemplo:
//csharp
var numeros = new List<int> { 1, 2, 3, 4, 5 };
var temNumeroNegativo = numeros.Any(num => num < 0);
// Saída: False
Console.WriteLine(temNumeroNegativo);
10.Concatenando com Concat Concat une duas sequências em uma única sequência. Por exemplo:
//csharp
var numeros1 = new List<int> { 1, 2, 3 };
var numeros2 = new List<int> { 4, 5, 6 };
var todosNumeros = numeros1.Concat(numeros2);
// Saída: 1, 2, 3, 4, 5, 6
Console.WriteLine(string.Join(", ", todosNumeros));