Select
- это проекция, поэтому вы получите выражение p.qty > 0
, вычисленное для каждого элемента в somelist
. то есть много значений true / false (тот же номер, что и в исходном списке). Поэтому, когда вы наберете Count
, вы получите тот же номер. Если вы посмотрите, выбор вернет IEnumerable<bool>
(потому что тип p.qty > 0
- это bool).
Where
фильтрует результаты, поэтому подсчет выполняется в отфильтрованном списке и дает ожидаемые результаты. Тип этого IEnumerable<TypeOfElementInOriginalList>
.
Обратите внимание, что вы также можете сделать: somelist.Count(p => p.qty > 0)
, потому что Count имеет перегрузку , которая принимает предикат для фильтрации.