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 :

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:


José Carlos Macoratti