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.
O 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?