Это зависит от того, как вы его используете и с чем сравниваете.
Я видел много реализаций, использующих foreache
s, которые были бы намного быстрее с linq. Например. потому что они забывают сломать или потому что они возвращают слишком много предметов. Хитрость заключается в том, что лямбда-выражения выполняются, когда элемент фактически используется. Когда в конце вы наберете First
, это может закончиться всего одним вызовом.
Таким образом, когда вы соединяете в цепочку Where
s, если элемент не проходит первое условие, он также не будет проверен на второе условие. это похоже на оператор &&
, который не оценивает условие на правой стороне, если первое не выполнено.
Можно сказать, что это всегда O (N). Но N - это не количество элементов в источнике, а минимальное количество элементов, необходимое для создания целевого набора. Это очень хорошая оптимизация, ИМХО.