如何在指定LINQ分组统计代码中添加OrderByDescending/ThenBy排序子句?
解决方案
你需要在GroupBy之后、Select之前添加排序子句,直接基于分组的统计值和首字母排序,修改后的完整代码如下:
stringList .GroupBy(x => x[0]) .OrderByDescending(g => g.Sum(x => x.Length)) .ThenBy(g => g.Key) .Select(g => $"{g.Sum(x => x.Length)}-{g.Key}");
细节说明:
OrderByDescending(g => g.Sum(x => x.Length)):按首字母对应字符串的总长度降序排列ThenBy(g => g.Key):当总长度相同时,按首字母的字符编码升序排列
如果想避免重复计算总长度(提升大数据量场景下的性能),可以先封装临时对象再排序:
stringList .GroupBy(x => x[0]) .Select(g => new { TotalLength = g.Sum(x => x.Length), FirstChar = g.Key }) .OrderByDescending(item => item.TotalLength) .ThenBy(item => item.FirstChar) .Select(item => $"{item.TotalLength}-{item.FirstChar}");
这种方式仅计算一次总长度,减少不必要的计算开销。
内容的提问来源于stack exchange,提问作者Oana
相关产品推荐
相关产品推荐

