Bạn chắc chắn nên sử dụng ThenBy
hơn là nhiều OrderBy
cuộc gọi.
Tôi muốn đề nghị điều này:
tmp = invoices.InvoiceCollection
.OrderBy(o => o.InvoiceOwner.LastName)
.ThenBy(o => o.InvoiceOwner.FirstName)
.ThenBy(o => o.InvoiceID);
Lưu ý cách bạn có thể sử dụng cùng tên mỗi lần. Điều này cũng tương đương với:
tmp = from o in invoices.InvoiceCollection
orderby o.InvoiceOwner.LastName,
o.InvoiceOwner.FirstName,
o.InvoiceID
select o;
Nếu bạn gọi OrderBy
nhiều lần, nó sẽ có hiệu quả sắp xếp lại trình tự hoàn toàn ba lần ... vì vậy các cuộc gọi cuối cùng sẽ có hiệu quả là người chiếm ưu thế. Bạn có thể (trong LINQ to Object) viết
foo.OrderBy(x).OrderBy(y).OrderBy(z)
tương đương với
foo.OrderBy(z).ThenBy(y).ThenBy(x)
vì thứ tự sắp xếp ổn định, nhưng bạn hoàn toàn không nên:
- Thật khó đọc
- Nó không hoạt động tốt (vì nó sắp xếp lại toàn bộ chuỗi)
- Nó cũng có thể không hoạt động trong các nhà cung cấp khác (ví dụ LINQ to SQL)
- Về cơ bản, nó không
OrderBy
được thiết kế để sử dụng.
Quan điểm OrderBy
là cung cấp phép chiếu thứ tự "quan trọng nhất"; sau đó sử dụng ThenBy
(lặp đi lặp lại) để chỉ định các phép chiếu thứ tự, bậc ba, vv.
Thực tế, hãy nghĩ về nó theo cách này: OrderBy(...).ThenBy(...).ThenBy(...)
cho phép bạn xây dựng một so sánh tổng hợp duy nhất cho bất kỳ hai đối tượng nào, và sau đó sắp xếp chuỗi một lần bằng cách sử dụng so sánh tổng hợp đó. Đó gần như chắc chắn là những gì bạn muốn.