如何通过LINQ实现按特定规则的多属性列表排序?
完善LINQ查询实现自定义优先级排序需求
没问题,我来帮你完善这个LINQ查询,完全贴合你的自定义排序规则!
需求回顾
你需要的排序逻辑是:
- 第一优先级:包含
ab的项,按字母序排序 - 第二优先级:包含
cd的项,按字母序排序 - 第三优先级:包含
ef的项,按字母序排序 - 最后:剩余项按字母序排序
完善后的LINQ查询
var groups = profileModel.Groups // 第一优先级:包含"ab"的项前置 .OrderByDescending(i => i.FullName.ToLower().Contains("ab")) // 第二优先级:在非"ab"项中,包含"cd"的前置 .ThenByDescending(i => i.FullName.ToLower().Contains("cd")) // 第三优先级:在非"ab"/"cd"项中,包含"ef"的前置 .ThenByDescending(i => i.FullName.ToLower().Contains("ef")) // 所有分组内按字母序排序(不区分大小写) .ThenBy(i => i.FullName.ToLower());
代码解释
- 优先级分组:前三个
OrderByDescending/ThenByDescending利用布尔值的排序特性(true对应数值1,false对应0),让符合条件的项自动排在前面,完美实现你的分组优先级。 - 组内排序:最后一个
ThenBy是核心——它会让所有项在完成优先级分组后,同一组内的项按照字母序排序(使用ToLower()是为了实现不区分大小写的排序,如果你需要严格区分大小写,去掉即可)。
示例效果
假设你的Groups有以下FullName值:["xyz", "ab123", "cd456", "ef789", "abxyz", "cdef", "ghij"]
排序后的结果会是:["ab123", "abxyz", "cd456", "cdef", "ef789", "ghij", "xyz"]
内容的提问来源于stack exchange,提问作者mohsinali1317
相关产品推荐
相关产品推荐

