Se tiverem alguma sugestão ou pedido de outros métodos, por favor.
-
First(), FirstOrDefault(), Single(), Last(), LastOrDefault()
-
Select()
-
SelectMany()
-
Where()
-
All(), Any()
-
ConvertAll()
-
Distinct()
-
Except()
-
ForEach()
-
GroupBy()
-
Concat()
-
Intersect()
-
Union()
-
Join()
-
OrderBy(), OrderByDescending()
-
Reverse()
-
Sort()
-
Skip(), SkipWhile()
-
Take(), TakeWhile()
-
ToDictionary()
-
ToLookup()
-
ZIP()
LINQ First(), FirstOrDefault(), Single(), Last(), LastOrDefault()
Neste post falarei sobre os métodos First, FirstOrDefault, Single, Last e LastOrDefault do LINQ, que são muito simples, mas exigem cuidado.
Todos são métodos de busca com uma sobrecarga que permite que seja atribuído um predicado à busca, ou seja, podemos fazer uma busca em uma lista de números inteiros, onde o predicado é: "que seja maior do que 10", por exemplo.
int primeiroNumeroMaiorQueDez = listaDeNumerosInteiros.First(numero => numero > 10);
Apesar dos métodos First e FirstOrDefault fazerem praticamente a mesma coisa, eles tem algumas diferenças, que serão discutidas adiante:
Fizemos um teste, buscando em uma lista de números inteiros, o primeiro elemento com o valor 100, através do método FIRST, sendo que na lista existia tal número.
Teste FIRST em uma lista com o elemento procurado
Em seguida fizemos o mesmo teste, em uma lista que não contém o número 100, o que nos levaria a uma dúvida: "O que o método irá nos retornar então?". A resposta é: "Uma exception".
Teste FIRST em uma lista sem o elemento procurado
Porém, em alguns momentos, gostaríamos de recuperar o elemento procurado apenas se ele existir, e se não existir, queremos que um valor default seja retornado, sem gerar exception, que no caso de uma lista de números inteiros é o número 0.
Neste caso, devemos utilizar o método FIRSTORDEFAULT:
Teste FIRSTORDEFAULT em uma lista sem o elemento procurado
Outro método que busca um elemento em uma lista é o Single, com o diferencial de que tal método, está esperando procurar um elemento único em uma lista, portanto o número de ocorrências do número procurado na lista não pode ser diferente de 1:
Teste SINGLE em uma lista sem o elemento procurado
Teste SINGLE em uma lista com apenas uma ocorrência do número procurado
Teste SINGLE em uma lista com mais de uma ocorrência do número procurado
Os métodos Last e LastOrDefault, se assemelham ao Fist e FirstOrDefault respectivamente, sendo que ao invés de buscarem o primeiro elemento, buscam o ultimo.
Não confunda. Com o método FirstOrDefault, o método First e Single parecem ser inúteis, porém cada um deles tem suas utilidades, por exemplo:
Se quisermos procurar em um cadastro, onde o CPF deve ser único, um usuário que tenha o CPF = 118.187.881-00, qual método usaríamos e porque?
A resposta é: "Single", pois se existir mais de um usuário com o CPF procurado, por alguma falha na lógica do sistema, isso pode gerar um problemão.
Suponha que a intenção de buscar o usuário pelo CPF seja de debitar um valor X de sua conta, gostaria que houvesse uma confusão entre 2 usuários, ou preferiria que uma exception fosse gerada para que sua equipe pudesse analisar o problema?
Bom, espero ter ajudado.
Abaixo disponibilizarei as classes utilizadas. O código-fonte pode ser obtido através do link(source) ou no git:
https://github.com/fsaalmeidinha/LinqFirst_Single_Last.git
TestLinqMethods.cs
Program.cs
Nenhum comentário:
Postar um comentário