он такой берет, идет по коллекции и смотрит если текущий элемент подходит - то выдает его, если нет - то пропускает. гугли Enumerable, enumerator, yield return
Он тебе возвращает итератор , который возвращает тебе элементы , которые удовлетворяют твоему предикату(условию), то есть проходишь по исходной коллекции , но выдаются элементы , которые подходят под твои условия