Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对列表进行排序,使特定值位于顶部_C#_Linq_List_Generics - Fatal编程技术网

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使用了不稳定的排序,我想是这样的)。啊,我明白了,我误解了布尔参数