如何实现自定义OrderBy/ThenBy排序:按TYPE、NAME排序且CODE=8置后
排序需求实现方案
原代码存在的问题
- 最高排序优先级设为TYPE,会导致小TYPE的CODE=8记录,排在大TYPE的非8记录前面,违背「所有CODE=8记录必须排在最后」的核心规则。
- 非8记录之间错误地按CODE数值排序,不符合「非8记录内部先按TYPE、再按NAME排序」的要求。
可行实现代码
将「是否为CODE=8」设为最高排序键,再依次按TYPE、NAME排序即可:
SomeList.OrderBy(c => c.Code == 8) .ThenBy(c => c.Type) .ThenBy(c => c.Name) .ToList();
逻辑说明
- 布尔值排序时
false小于true,因此所有非CODE=8的记录(布尔值为false)会自动排在前半段,CODE=8的记录(布尔值为true)全部排在后半段,实现8值记录后置的要求。 - 两组内部各自按TYPE升序、同TYPE下按NAME升序排列,匹配你给出的前半段(1 AAA 7、1 EEE 7、4 DDD 5、5 CCC 6)和后半段(1 BBB 8、1 DDD 8)的排序逻辑,期望结果中
4 BBB 1为明显输入笔误。
内容的提问来源于stack exchange,提问作者Jane Ortega
相关产品推荐
相关产品推荐

