我有一个班级Offer
,其中包含已归档的类别。
我希望特定类别的所有优惠都显示在最顶层,然后是其他所有优惠。
我试过这个,但无济于事,你会推荐什么?
Offers = Offers.OrderBy(x => x.Category == "Corporate").ToList();
答案 0 :(得分:26)
按布尔值false
(0)排序时,true
(1)之前。要首先获取与谓词匹配的元素,您应该使用OrderByDescending
:
Offers = Offers.OrderByDescending(x => x.Category == "Corporate").ToList();
答案 1 :(得分:14)
C# Language Specification 5.0未指定true
和false
值的字节表示。因此,最好不要依赖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();