Ответ 1
Это действительно зависит от поставщика LINQ (класс, который реализует IQueryable<T>
).
В Entity Framework и LINQ to SQL (и других провайдерах LINQ, связанных с базой данных) запрос преобразуется в операторы SQL, а затем запускается в базе данных. Например, этот запрос:
var ns = names.OrderBy(n => n).Where(n => n.Length == 5);
при повторном преобразовании преобразуется в:
SELECT * FROM names WHERE LEN(name) == 5 ORDER BY name
независимо от того, где вы помещаете предложение OrderBy
.
Таким образом, в этом случае нет производительности. Но при использовании LINQ to Objects (как в вашем примере) эти два варианта имеют большую разницу в производительности. Эта форма ответа Jon Skeet очень хорошо описывает этот случай.