2011-12-08 21 views
7

Dosyalanmış bir Kategori içeren bir sınıf Offer var.Listeyi sırala özel bir değer üstte biter

Belirli bir kategorideki tüm Tekliflerin üstte görünmesini, ardından da hepsinin olmasını istiyorum.

Bunu denedim, ama boşuna, ne önerirsiniz? Eğer bir boolean değeri false tarafından sipariş ettiğinizde

Offers = Offers.OrderBy(x => x.Category == "Corporate").ToList(); 
+0

: Bu nedenle, açıkça bir tür değeri belirtmek için bir üçlü operatörü kullanılır? Bunun nesi var? –

+0

http://stackoverflow.com/questions/728319/linq-orderby-against-specific-values ​​ –

+1

'a bakın. Düzgün bir şekilde sıralanmadı, hala orijinal düzende gibi görünüyor. – Wesley

cevap

19

(0) true önce gelir (1). yüklemi eşleşen elemanları almak için öncelikle OrderByDescending kullanarak Sıralamayı iptal edilmelidir:

Offers = Offers.OrderByDescending(x => x.Category == "Corporate").ToList(); 
+0

+1 güzel bir çözüm –

+0

Uh, ama bu diğer her şeyin sırasını da tersine çevirecektir. Bunun yerine OrderBy (x => x.Category! = "Corporate") 'ı deneyin. –

+3

+1. Ve belki de Kategori adı ile kalan teklifleri sıralamak için bir ThenBy (x => x.Category) ekleyerek ..? –

10

C# Language Specification 5.0true ve false değerler için bir bayt gösterimi belirtmez. Bu nedenle, true'un 1 tarafından temsil edildiği varsayımına güvenmemek daha iyidir. Ayrıca, x.Category == "Corporate" Boolean ifadesiyle sıralama sonucu, true'un da negatif bir değerle temsil edilebileceği açık değildir. Eğer "boşuna" dediğimizde bu ifadenin sonuç ne,

Offers = Offers 
    .OrderBy(x => x.Category == "Corporate" ? 0 : 1) 
    .ThenBy(x => x.Category) 
    .ThenBy(x => x.Date) // or what ever 
    .ToList();