You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LINQ两列排序疑问:OrderBy与ThenBy用法是否不符合需求?

问题分析与解决方案

你的LINQ写法存在问题,ThenBy()的使用逻辑不符合你的排序需求,导致结果和预期不符。

问题根源

现有代码先对完整的Column1字符串进行排序,再按Column2排序。但Column1的完整字符串排序会优先比较数字部分(比如QA7878729D的数字段7878729小于QA7878736A的7878736),所以会出现QA7878729D排在QA7878736A前面的情况,这和你“同前缀组内按Column2排序”的需求冲突。

修正后的LINQ代码

根据你的需求(先按Column1前缀QA/QB分组,同组内按Column2首字母A-D排序),需要调整排序的依据:

List<FromTextFile> sortedList = ColumnsSwapped
    .OrderBy(o => o.Column1.Substring(0, 2)) // 优先按Column1的前两位前缀排序,确保QA在QB前
    .ThenBy(o => o.Column2[0]) // 同前缀组内,按Column2的首字母排序(A→B→C→D)
    .ToList();

代码说明

  • OrderBy(o => o.Column1.Substring(0, 2)):提取Column1的前两位(QA/QB)作为第一排序键,保证所有QA开头的项排在QB开头的项之前。
  • ThenBy(o => o.Column2[0]):在同一前缀组内,用Column2的第一个字符作为第二排序键,实现A到D的顺序排列。

这样执行后,就能得到你期望的排序结果:

Column1; Column2
QA7878736A; A6378787AQ
QA7878751B; B1578787AQ
QA7878834C; C4388787AQ
QA7878729D; D9278787AQ
QB7878726D; D6278787BQ

内容的提问来源于stack exchange,提问作者Illyiana Yusof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:30:04