Обычно методы, которые возвращают последовательность, используют отложенное выполнение:
IEnumerable<X> ---> Select ---> IEnumerable<Y>
, а методы, которые возвращают один объект, не:
IEnumerable<X> ---> First ---> Y
Итак, такие методы, как Where
,Select
, Take
, Skip
, GroupBy
и OrderBy
используют отложенное выполнение, потому что могут, в то время как такие методы, как First
, Single
, ToList
и ToArray
, не могут, потому что могут't.
Существует также два типа отложенного выполнения.Например, метод Select
будет получать только один элемент за один раз, когда его попросят произвести элемент, в то время как метод OrderBy
должен будет потреблять весь источник, когда его попросят вернуть первый элемент.Таким образом, если вы соедините OrderBy
после Select
, выполнение будет отложено до тех пор, пока вы не получите первый элемент, но затем OrderBy
запросит Select
для всех элементов.