2011-12-08 150 views
7

我有一個類Offer其中包含一個歸檔類別。對列表進行排序,使特定值排在最前

我希望特定類別的所有優惠出現在最上面,其次是所有其他優惠。

我試過了,但無濟於事,你會推薦什麼?

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

當您說「無濟於事」時,該表達式的結果是什麼?它出什麼問題了? –

+0

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

+1

它沒有正確排序,它似乎仍然是在原來的順序。 – Wesley

回答

19

當您以通過一個布爾值false(0)來true前(1)。拿到賽的謂詞的元素首先你應該使用OrderByDescending反向排序:

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

+1不錯的解決方案 –

+0

呃,但是這也會扭轉其他一切的順序。試試'OrderBy(x => x.Category!=「Corporate」)'。 –

+3

+1。也許可以通過添加一個ThenBy(x => x.Category)來按類別名稱對剩餘商品進行排序..? –

10

C# Language Specification 5.0不指定truefalse值的字節表示。因此,最好不要依靠true代表1的假設。另外,由布爾表達式x.Category == "Corporate"排序的結果並不明顯,因爲true也可以由負值表示。因此,我使用三元運算符來明確指定排序值:

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