2012-05-27 4 views
6

Что делает Any() в следующем запросе?Что означает Any() в этом запросе LINQ?

context.Customers 
    .Include("InternetSales") 
    .Where(c => c.InternetSales.Any()) 
    .Take(100); 

Как бы вы прочитали этот запрос на простом английском языке? Например, было бы верно?

«Получите клиентов со своими 100 продажами в Интернете».

(я знаю, что нет «получить» в коде, но вы получите то, что я имею в виду.)

ответ

19

В Any оператор проверяет, содержит ли некоторые перечислимы/коллекция, по крайней мере один элемент, то есть ли это непусто.

Так что я предполагаю, что ваш запрос может читаться как:

«первые 100 клиентов, которые сделали по крайней мере один интернет-продажа»

или несколько ближе к металлу:

"первые 100 Customer Объекты, которые содержат непустые InternetSales collection"

.Any() похож на .Count() > 0, но она будет потреблять не более одного элемента в коллекции, в то время как Count потребляет полную коллекцию, так Any, как правило, более эффективно и работает для бесконечных последовательностей, тоже. При условии, что вас не интересует точное количество предметов, Any также выражает намерение более четко проверить непустоту.

+0

Ваше объяснение отличное. Благодарю. – NoChance

+0

Возможно, синоним NotEmpty() был бы приятным :) – NetMage

+0

@NetMage: IMHO, гораздо проще интуитивно понять значение 'customers.Any()', чем 'customers.NotEmpty()'. С последним мне придется не сводить мозг с озадачивания понятия непустых клиентов: «Они похожи на молочные бутылки, т. Е. Они могут быть пустыми или полными или что-то промежуточным?» OTOH, с 'customers.Any()', предполагаемое значение сразу же очевидно: «Есть ли клиенты?» – stakx

Смежные вопросы