Это будет зависеть от используемого поставщика LINQ.Для LINQ to Objects это, безусловно, может иметь огромное значение .Предположим, что у нас есть:
var query = myCollection.OrderBy(item => item.CreatedDate)
.Where(item => item.Code > 3);
var result = query.Last();
Это требует, чтобы коллекция вся была отсортирована и затем отфильтрована.Если бы у нас было миллион элементов, только один из которых имел код больше 3, мы бы потратили много времени на упорядочивание результатов, которые были бы отброшены.
Сравните это с обратной операцией, сначала отфильтровав:
var query = myCollection.Where(item => item.Code > 3)
.OrderBy(item => item.CreatedDate);
var result = query.Last();
На этот раз мы упорядочиваем только отфильтрованные результаты, что в примере "всего один элемент, соответствующий фильтру" будет намного эффективнее - как во времени, так и в пространстве.
Также может иметь значение в том, правильно ли выполняется запрос или нет.Рассмотрим:
var query = myCollection.Where(item => item.Code != 0)
.OrderBy(item => 10 / item.Code);
var result = query.Last();
Это нормально - мы знаем, что никогда не будем делить на 0. Но если мы выполним порядок до фильтрации, запрос выдаст исключение.