Anda pasti harus menggunakan ThenBy
daripada beberapa OrderBy
panggilan.
Saya menyarankan ini:
tmp = invoices.InvoiceCollection
.OrderBy(o => o.InvoiceOwner.LastName)
.ThenBy(o => o.InvoiceOwner.FirstName)
.ThenBy(o => o.InvoiceID);
Perhatikan bagaimana Anda dapat menggunakan nama yang sama setiap saat. Ini juga setara dengan:
tmp = from o in invoices.InvoiceCollection
orderby o.InvoiceOwner.LastName,
o.InvoiceOwner.FirstName,
o.InvoiceID
select o;
Jika Anda menelepon OrderBy
beberapa kali, itu akan secara efektif menyusun ulang urutan seluruhnya tiga kali ... jadi panggilan terakhir secara efektif akan menjadi yang dominan. Anda dapat (dalam LINQ ke Objek) menulis
foo.OrderBy(x).OrderBy(y).OrderBy(z)
yang setara dengan
foo.OrderBy(z).ThenBy(y).ThenBy(x)
karena urutan sortirnya stabil, tetapi Anda sama sekali tidak boleh:
- Sulit untuk dibaca
- Tidak bekerja dengan baik (karena menyusun ulang seluruh urutan)
- Ini mungkin tidak berfungsi di penyedia lain (misalnya LINQ ke SQL)
- Ini pada dasarnya bukan bagaimana
OrderBy
dirancang untuk digunakan.
Intinya OrderBy
adalah untuk memberikan proyeksi pemesanan yang "paling penting"; kemudian gunakan ThenBy
(berulang kali) untuk menentukan proyeksi urutan sekunder, tersier, dll.
Secara efektif, pikirkan seperti ini: OrderBy(...).ThenBy(...).ThenBy(...)
memungkinkan Anda membuat perbandingan gabungan tunggal untuk dua objek, lalu mengurutkan urutan sekali menggunakan perbandingan gabungan tersebut. Hampir pasti itulah yang Anda inginkan.