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
相关产品推荐
相关产品推荐

