Sen gerektiğini kesinlikle kullanmayın ThenBybirden ziyade OrderByaramalar.
Bunu öneririm:
tmp = invoices.InvoiceCollection
.OrderBy(o => o.InvoiceOwner.LastName)
.ThenBy(o => o.InvoiceOwner.FirstName)
.ThenBy(o => o.InvoiceID);
Her seferinde aynı adı nasıl kullanabileceğinizi not edin. Bu aynı zamanda şuna da eşdeğerdir:
tmp = from o in invoices.InvoiceCollection
orderby o.InvoiceOwner.LastName,
o.InvoiceOwner.FirstName,
o.InvoiceID
select o;
Birden OrderByçok kez ararsanız , diziyi tamamen üç kez etkili bir şekilde yeniden düzenler ... böylece son arama etkili bir şekilde baskın olan olur. Sen can (LINQ Nesneler) yazma
foo.OrderBy(x).OrderBy(y).OrderBy(z)
eşdeğer olacaktır
foo.OrderBy(z).ThenBy(y).ThenBy(x)
sıralama düzeni sabit olduğundan, ancak şunları kesinlikle yapmamalısınız:
- Okumak zor
- İyi performans göstermiyor (çünkü tüm diziyi yeniden sıraladı)
- İyi olabilir değil diğer sağlayıcılar (örneğin LINQ to SQL) çalışmak
- Temelde nasıl
OrderBykullanılmak üzere tasarlandığı değil .
Buradaki OrderByamaç, "en önemli" sipariş projeksiyonunu sağlamaktır; daha sonra ThenByikincil, üçüncül vb sıralama projeksiyonlarını belirtmek için (tekrar tekrar) kullanın.
: Etkili, Şöyle düşünmek OrderBy(...).ThenBy(...).ThenBy(...)tür ardından dizisini herhangi iki nesne için tek kompozit karşılaştırma oluşturmanızı sağlar ve bir kez bu kompozit karşılaştırma kullanılarak. Neredeyse kesinlikle istediğiniz şey bu.