LINQ: Count() vs Any()

Supondo que x é uma lista/query/array. Muitas das vezes deparamo-nos com situações em que temos de determinar se essa lista está vazia. Penso que a aproximação imediata seria:

if (x.Count() > 0)
{
	// fazer o que há para fazer
}

No entanto, há um método bem mais indicado para estas situações em que não queremos saber realmente quantos elementos existem, mas sim se existe pelo menos um.

if (x.Any())
{
	// ice cream
}

E, como prenda de Natal, podemos ainda fazer algo do género:

if (x.Any(p => p.Idade > 16))
{
	//Há pelo menos um elemento na lista x com idade superior a 16 anos
}

Ora, no fundo ambos fazem a mesma coisa. Então porque tenho de pegar em todo o meu código e alterar? Eficiência.
Any() diz ao provider desta query para verificar se a lista está vazia usando a forma mais eficaz. Isto deixa margem para o "tradutor" de LINQ para SQL optimizar a query. Em SQL seria algo tipo um EXISTS e não um COUNT.
Além do mais, não queremos realmente saber quantos elementos são, mas sim se existe algum. Vamos ter pena dos nossos SGBD's e não os forçar a fazer trabalho desnecessário, sim?

About the author

Pedro Querido é estudante de Licenciatura em Engenharia Informática na Universidade da Beira Interior. É um apaixonado por tecnologia e música. Simpatizante de guitarra, mais tarde apaixonou-se por sintetizadores. Por vezes passa horas a criar sons irritantes e a tentar compor algo, o que nem sempre corre bem. Nos tempos livres gosta de ler sobre neurologia e criptografia. O gosto pela programação vem desde cedo e foi o que o levou a seguir a área da Informática. Actualmente desenvolve a maior parte dos seus projectos em C# e adora explorar a tecnologia que está por detrás da .Net Framework.

Month List