C# 对列表进行排序,使特定值位于顶部
我有一个类C# 对列表进行排序,使特定值位于顶部,c#,linq,list,generics,C#,Linq,List,Generics,我有一个类Offer,它包含一个归档类别 我希望某一特定类别的所有优惠都显示在顶部,然后是其他所有优惠 我试过了,但没用,你推荐什么 Offers = Offers.OrderBy(x => x.Category == "Corporate").ToList(); 按布尔值排序时,false(0)位于true(1)之前。要首先获取与谓词匹配的元素,应使用OrderByDescending反转排序顺序: Offers = Offers.OrderByDescending(x => x
Offer
,它包含一个归档类别
我希望某一特定类别的所有优惠都显示在顶部,然后是其他所有优惠
我试过了,但没用,你推荐什么
Offers = Offers.OrderBy(x => x.Category == "Corporate").ToList();
按布尔值排序时,
false
(0)位于true
(1)之前。要首先获取与谓词匹配的元素,应使用OrderByDescending
反转排序顺序:
Offers = Offers.OrderByDescending(x => x.Category == "Corporate").ToList();
未为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();
当你说“没有用”时,那句话的结果是什么?有什么问题吗?看看它排序不正确,看起来仍然是原来的顺序。嗯,但这也会颠倒其他一切的顺序。请尝试使用
OrderBy(x=>x.Category!=“Corporate”)
。+1。也许会添加一个ThenBy(x=>x.Category)来按类别名称对剩余的报价进行排序……我不太愿意依赖false和true的排序,其他开发人员也会理解。我倾向于明确我的意图,例如,.OrderBy(x=>x.Category==“Corporate”?0:1)
@BlueRaja DannyPflughoeft其他一切的顺序都是未定义的(如果OrderBy使用了不稳定的排序,我想是这样的)。啊,我明白了,我误解了布尔参数