Novidades do .NET 6: melhorias em LINQ - ExceptBy e DistinctBy

Renato Groffe
3 min readJun 12, 2021

--

No final de Maio (dias 25 a 27, terça a quinta) tivemos a edição 2021 do Microsoft Build, a conferência anual da Microsoft para Desenvolvedores. Mais uma vez foram inúmeros os anúncios envolvendo a plataforma .NET, com algumas das novidades estão listadas no post a seguir:

Este artigo já é o oitavo da série que venho produzindo sobre as novidades que vieram com esta edição do Build, na qual foi disponibilizado o Preview 4 do .NET 6. Caso deseje acessar ou mesmo rever algum dos artigos anteriores acesse os links:

Novidades do .NET 6: suporte a Hot Reload no Visual Studio 2019

Novidades do .NET 6: melhorias em LINQ - FirstOrDefault, LastOrDefault e SingleOrDefault

Novidades do .NET 6: DateOnly e TimeOnly structs

Novidades do .NET 6: melhorias em LINQ - UnionBy e IntersectBy

Novidades do .NET 6: HTTP Logging no ASP.NET Core

Novidades do .NET 6: melhorias em LINQ - MaxBy e MinBy

Novidades do .NET 6: Minimal APIs em ASP.NET Core

Novos recursos para a manipulação de objetos com LINQ foram disponibilizados com o Preview 4 do .NET 6, com tais extensões estando vinculadas ao namespace System.Linq.

Duas dessas funcionalidades são os métodos:

  • ExceptBy, em que apenas os elementos de uma coleção não encontrados em uma segunda estrutura do mesmo tipo serão retornados. O critério para detectar itens a serem descartados no resultado passa pelo uso de uma propriedade comum aos objetos das duas coleções envolvidas;
  • DistinctBy, que retornará apenas elementos distintos tomando como base uma propriedade definida nos objetos de uma coleção.

Esses novos métodos dispensam implementações como aquelas baseadas na interface IEqualityComparer (utilizadas por extensões LINQ mais antigas como Except e Intersect).

Na listagem a seguir podemos observar exemplos de uso dos métodos ExceptBy e DistinctBy com arrays do tipo Pais:

  • No caso específico de ExceptBy apenas itens que pertencem a paises e que não estejam em paisesUniaoEuropeia serão retornados (a chave para isto é a propriedade Nome);
  • No exemplo com DistinctBy o método Union será acionado primeiramente, gerando uma nova coleção com duplicidades através da junção dos arrays paises e paisesUniaoEuropeia. Em seguida o uso de DistinctBy especificando a propriedade Nome permitirá eliminar tais duplicidades.

A imagem seguinte traz o resultado da utilização do método ExceptBy:

Já na próxima imagem temos o resultado para DistinctBy:

Esse exemplo também está no GitHub:

https://github.com/renatogroffe/DotNet6_Preview4-LINQ-ExceptBy-DistinctBy_ConsoleApp

E concluo este artigo com um convite…

Dia 28/06 (segunda) às 21:00 horário de Brasília — teremos mais um evento online e gratuito no canal Canal .NET.

Ao longo desta live abordarei dicas, truques e alternativas úteis para o desenvolvimento Back-End e de APIs REST com .NET 5, ASP.NET Core, Azure Functions. Ao longo da apresentação será coberto o uso de diferentes frameworks, serviços na nuvem, mensageria, bancos de dados e boas práticas de forma a facilitar e tornar mais dinâmica a implementação de soluções baseadas na plataforma .NET no seu dia a dia.

Teremos também algumas novidades do .NET 6 demonstradas na prática!

Para participar faça sua inscrição no link a seguir, a transmissão acontecerá via YouTube:

https://bit.ly/live-backend-dotnet-jun-2021

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker