Métodos LINQ na prática – Parte #1

Neste artigo inicio uma série sobre o LINQ e seus métodos. Por sua grande variedade de métodos com diferentes propósitos, separei em mais de uma parte para poder abordar com exemplos mais práticos e focados.

Conhecer e saber aplicar os métodos LINQ é algo essencial para desenvolvedores .NET, já que geralmente seu uso é algo rotineiro para projetos de diversos portes.

Introdução

LINQ, ou Language-Integrated Query, é uma sintaxe para consultas em .NET, compatível com fontes de dados de diferentes fontes (como listas e DbSets do EF Core).

Ela possui métodos que extendem a capacidade de coleções de dados como busca, ordenação, projeção, e outros como soma, obtenção de máximos e mínimos, entre outros objetivos.

Neste primeiro artigo vou focar nos métodos de buscas, sendo os principais deles:

  • Single e SingleOrDefault
  • First e FirstOrDefault
  • Where

Métodos de Buscas

Entre os métodos de busca existem os que retornam um elemento e os que realizam filtragem, este último retornando os elementos cuja expressão lambda, que retorna um valor booleano, seja verdadeira.

Single e SingleOrDefault

Os métodos Single e SingleOrDefault retornam um único elemento específico de uma coleção de dados. A diferença entre eles está no comportamento quando nenhum elemento é encontrado.

No caso do Single, as seguintes exceções podem ser lançadas:

  • ArgumentNullException: se a fonte de dados ou a expressão booleana é nula.
  • InvalidOperationException: se mais de um elemento ou nenhum atende a expressão booleana, ou se a coleção estiver vazia.

Já no caso do SingleOrDefault, existe uma mudança importante, evidenciada abaixo.

  • ArgumentNullException: se a fonte de dados for nula.
  • InvalidOperationException: se mais de um elemento atende a expressão booleana.

Se o elemento não for encontrado, é retornado o valor padrão daquele tipo.

First e FirstOrDefault

Os métodos First e FirstOrDefault retornam o primeiro elemento de uma coleção de dados, permitindo receber um parâmetro de expressão lambda que retorna um valor booleano. Assim como nos dois métodos anteriores, a diferença entre eles está no comportamento quando nenhum elemento é encontrado.

No caso do First, as seguintes exceções podem ser lançadas:

  • ArgumentNullException: se a fonte de dados ou expressão booleana forem nulas.
  • InvalidOperationException: Se nenhum elemento atende a expressão lambda booleana, ou se a coleção estiver vazia.

Já no caso do FirstOrDefault, existe uma mudança importante, evidenciada abaixo.

  • ArgumentNullException: se a fonte de dados ou expressão booleana forem nulas.

Se o elemento não for encontrado, é retornado o valor padrão daquele tipo.

Where

O método Where filtra uma coleção de valores baseado em uma expressão lambda booleana.

A exceção que ele pode lançar é a ArgumentNullException, que ocorre quando a coleção ou a expressão lambda são nulos.

Aplicação

É hora de aplicar na prática esses 5 métodos. Para começar, defini uma classe Student, que contém dados de nome (Name) e nota (Grade). A idéia é utilizar esses dois dados para realizar busca e filtragem.

Com esta classe definida, vou então utilizar os métodos sobre uma lista de Student.

O exemplo acima utiliza os métodos Single e First, e suas respectivas versões SingleOrDefault e FirstOrDefault, demonstrando o seu uso e lançamento de exceções dependendo da expressão lambda. Além disso, o método Where é utilizado, com a iteração e impressão de seus elementos filtrados.


Inscreva-se na lista de espera do Método .NET Direto ao Ponto, um treinamento completo sobre C#, APIs com ASP.NET Core e Microsserviços:  Inscreva-se aqui.

São quase 200 vídeo-aulas sobre temas como C#, ASP NET Core 5, EF Core, CQRS, Clean Architecture, Autenticação e autorização com JWT, Testes Unitários, além de mini-cursos em Microsserviços, Performance em .NET, ASP NET Core e Azure, Docker, Carreira Internacional em .NET, e mais.


Conclusão

Eu não sou do tipo de pessoa que afirma algo como se fosse uma lei ou regra. Mas acredito que dominar o LINQ e seus métodos é algo muito importante para uma carreira de desenvolvedor .NET.

Geralmente eu gosto de utilizar as versões OrDefault dos métodos de busca, já que me dão a chance de checar por um valor padrão (geralmente nulo), me dando mais controle sobre o fluxo do código.