Giả sử tôi làm điều gì đó nhưLINQ có biết cách tối ưu hóa "truy vấn" không?
var Ordered = MyList.OrderBy(x => x.prop1).ThenBy(x => x.prop2);
Liệu MyList.OrderBy(x => x.prop1)
trở lại danh sách lọc, và sau đó nó tiếp tục lọc danh sách đó bởi ThenBy(x => x.prop2)
? Nói cách khác, nó có tương đương với
var OrderedByProp1 = MyList.OrderBy(x => x.prop1);
var Ordered = OrderedByProp1.OrderBy(x => x.prop2);
???
Bởi vì rõ ràng là nó có thể để tối ưu hóa này bằng cách chạy một thuật toán sắp xếp với một so sánh:
var Ordered = MyList.Sort((x,y) => x.prop1 != y.prop1 ? x.prop1 < y.prop1 : (x.prop2 < y.prop2));
Nếu có làm một số loại danh sách tối ưu hóa và trung gian không được trả lại trong quá trình này, thì làm sao nó biết làm thế nào để làm điều đó? Làm thế nào để bạn viết một lớp học tối ưu hóa chuỗi các phương pháp trên chính nó? Làm cho không có ý nghĩa.
Hương vị của LINQ là gì? LINQ to Objects, LINQ to Entities, v.v ...? –
Và nếu LINQ to Entities, nhà cung cấp LINQ nào? Có nhiều. Lưu ý rằng có những thay đổi trong EF7 giúp các nhà cung cấp LINQ to Entities dễ dàng hơn trong việc tối ưu hóa các truy vấn. –
Nếu bạn đang kết nối với một cơ sở dữ liệu sử dụng SQL Profiler để so sánh các truy vấn cơ sở dữ liệu được tạo ra trong mỗi trường hợp và xem sự khác biệt là gì (nếu có). – ChrisF