To naprawdę zależy od dostawcy LINQ (klasy, która implementuje IQueryable<T>
).
Na Entity Framework i LINQ do SQL (i innych dostawców LINQ powiązanych z bazą danych) zapytanie jest konwertowane na instrukcje SQL, a następnie uruchamiane w silniku bazy danych. Na przykład, to zapytanie:
var ns = names.OrderBy(n => n).Where(n => n.Length == 5);
kiedy powtórzyć skończy, zostaną zamienione na:
SELECT * FROM names WHERE LEN(name) == 5 ORDER BY name
Nie ważne gdzie można umieścić klauzulę OrderBy
.
W tym przypadku nie ma żadnego wyniku skuteczności. Ale kiedy używasz LINQ do Objects (jak w twoim przykładzie), dwie odmiany mają dużą różnicę w wydajności. This answer form Jon Skeet dość dobrze pokrywa się z tym przypadkiem.
Skompiluj kod i sprawdź w ILDASM końcowy kod wygenerowany w obu przypadkach: – Guanxi
http://blogs.msdn.com/b/csharpfaq/archive/2009/01/26/does-the-linq-to-objects -provider-have-built-in-performance-optimization.aspx – dotNET