Como Usar LINQ
para Recuperar Valores Distintos de Propriedades de Listas em Memória
Trabalhar com coleções em C# é uma tarefa comum, especialmente ao lidar com diferentes propriedades de objetos. Um requisito frequente é extrair valores únicos de uma lista de forma eficiente. Neste post, abordaremos uma pergunta comum enfrentada por muitos desenvolvedores: Como posso obter um array de valores distintos de propriedades de uma lista em memória usando LINQ
?
Entendendo o Problema
Imagine que você tem uma lista de objetos de uma classe chamada Foo
. Cada objeto Foo
possui uma propriedade de string chamada Bar
, e você deseja reunir todos os valores únicos de Bar
desta lista. O desafio é alcançar isso sem uma complexidade excessiva e de uma forma que seja eficiente e sustentável.
O Cenário
- Você tem uma
List<Foo>
. - Cada objeto
Foo
tem uma propriedadeBar
do tipostring
. - Você quer obter um
string[]
contendo apenas os valores distintos das propriedadesBar
de todas as instâncias deFoo
.
A Solução
Para extrair eficazmente os valores distintos de Bar
de uma lista de objetos Foo
, você pode utilizar o poder do LINQ
. Veja como fazer isso:
Usando LINQ para Extrair Valores Distintos
Aqui está uma maneira simples e elegante de alcançar seu objetivo usando LINQ:
var bars = Foos.Select(f => f.Bar).Distinct().ToArray();
Analisando o Código
Foos.Select(f => f.Bar)
: Esta parte do código é uma expressão lambda que projeta cada objetoFoo
em sua propriedadeBar
..Distinct()
: Esta chamada de método filtra o resultado para retornar apenas valores únicos, eliminando efetivamente duplicatas da seleção..ToArray()
: Finalmente,ToArray()
converte o resultado do IEnumerable em um array de strings.
Considerações Importantes
- Execução Adiada: Consultas LINQ não são executadas até que você consuma seus resultados explicitamente. Ao usar métodos como
ToArray()
ouCount()
, você aciona a avaliação da consulta. - Otimizações: É aconselhável construir suas consultas completamente antes de forçar a avaliação com
ToArray()
, pois o LINQ pode aplicar otimizações durante o processo de execução.
Conclusão
Usar LINQ não apenas simplifica o processo de extração de valores distintos de propriedades, mas também garante que seu código seja limpo e sustentável. Estruturando adequadamente suas consultas, você pode aproveitar efetivamente as capacidades do LINQ para otimizar o desempenho.
Agora, da próxima vez que você precisar extrair valores distintos de uma lista em C#, você pode aplicar essa abordagem direta com confiança!