LINQ
- Diferenças entre Any e Exists
![]() |
Hoje veremos as diferenças (se é que existem) entre Any e Exists no LINQ. |
Se você esta chegando agora e não sabe o que é LINQ - Language Integrated Query - ela pode ser entendida como um conjunto de recursos introduzidos no .NET Framework 3.5 que permitem a realização de consultas diretamente em base de dados, documentos XML , estrutura de dados , coleção de objetos ,etc. usando uma sintaxe parecida com a linguagem SQL.
A LINQ é um conjunto de métodos de extensão que manipulam algo que seja do tipo IEnumerable ou IQueryable. Esses métodos manipulam item por item da coleção e podem ser compostos entre si.
Como não existe almoço grátis o LINQ acrescenta um overhead de execução em coleções, principalmente em memória. Então deve-se ponderar se vale a pena seu uso. Na maioria das vezes vale, mas tem que saber usar.
Hoje vamos focar em dois métodos :
IEnumerable<int> numeros = new[] { 1, 3, 4, 5, 6, 7 };
bool existe = numeros.Any(x => x == 2 || x == 3);
ou
var inteiros = new List<int>() { 34, 67, 10, 1}
bool resultado = inteiros.Any();
|
Como List<T> é derivado de IEnumerable<T> ao gerar um List<T> temos um objeto que é um IEnumerable<T>.
Ex: Verifica se os elementos 1 e 3 existem na lista:
List<int> lista = new List<int> { 1, 2, 3 };
bool existe = lista.Exists(x => x == 1 || x == 3);
|
A diferença é que
Any é um método de extensão para qualquer
IEnumerable<T> definido em
System.Linq.Enumerable enquanto que Exists é
um método da classe List que funciona da mesma
forma que Any.
O método Any também tem uma sobrecarga que não
aceita parâmetros e simplesmente procura qualquer item no enumerável. Ele
retorna true se pelo menos um elemento existir na
sequência ou lista.
var inteiros = new List<int>() {
34, 67, 10, 1 }; bool resultado = inteiros.Any(); |
O método Exists não tem essa sobrecarga.
Assim podemos definir a diferença entre IEnumerable e List pois Exists somente vai poder ser usado com um objeto List<T>.
A interface IEnumerable descreve o comportamento, enquanto List é uma implementação desse comportamento.
Ao usar IEnumerable, você dá ao compilador a chance de adiar o trabalho até mais tarde, possivelmente otimizando ao longo do caminho. Se você usar ToList(), força o compilador a retificar os resultados imediatamente.
"Que diremos,
pois, a estas coisas? Se Deus é por nós, quem será contra nós?"
Romanos 8:31
Referências:
C# - Tasks x Threads. Qual a diferença
VB .NET - Datas, horas: conceitos e operações
C# - Programação Assíncrona como : Asycn e Task
C# - Obtendo a data e a hora por TimeZone
C# - O Struct Guid - Macoratti.net
C# - Checando Null de uma forma mais elegante
DateTime - Macoratti.net
Null o que é isso ? - Macoratti.net
Formatação de data e hora para uma cultura ...
C# - Calculando a diferença entre duas datas
NET - Padrão de Projeto - Null Object Pattern i
C# - Fundamentos : Definindo DateTime como Null ...
C# - Os tipos Nullable (Tipos Anuláveis)