对列表进行排序,使特定值最终排在最前面

时间:2011-12-08 19:58:02

标签: c# linq list generics

我有一个班级Offer,其中包含已归档的类别。

我希望特定类别的所有优惠都显示在最顶层,然后是其他所有优惠。

我试过这个,但无济于事,你会推荐什么?

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

2 个答案:

答案 0 :(得分:26)

按布尔值false(0)排序时,true(1)之前。要首先获取与谓词匹配的元素,您应该使用OrderByDescending

来反转排序顺序
Offers = Offers.OrderByDescending(x => x.Category == "Corporate").ToList();

答案 1 :(得分:14)

C# Language Specification 5.0未指定truefalse值的字节表示。因此,最好不要依赖true1表示的假设。此外,按布尔表达式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();