列表先按Id排序后,相同Id数据按日期降序排序的实现问题
解决同Id下日期降序排序的问题
嘿,我明白你的需求啦——现在你的列表已经按Id排好序,但同Id分组内的日期是升序排列的,想要改成同组内日期降序,还没法直接对整个列表重新排序对吧?这里给你两种可行的方案:
方案一:直接调整原排序逻辑(如果允许修改排序代码)
如果你只是之前用了ThenBy做日期升序,那直接把ThenBy换成ThenByDescending就能实现同Id下日期降序,同时保留Id的排序顺序:
// 假设你的数据项有Id、Title、Date属性 var desiredSortedList = originalList .OrderBy(item => item.Id) .ThenByDescending(item => item.Date) .ToList();
这样执行后,就会先按Id排序,同Id的项再按日期从新到旧排列,正好符合你想要的结果。
方案二:基于已排序的列表做组内调整(无法重新整体排序时)
如果你的列表已经是按Id升序+日期升序排好的,且不能重新执行完整的排序流程,那可以通过分组+组内倒序的方式实现:
var desiredSortedList = originalList .GroupBy(item => item.Id) // 按Id分组,保留原列表的Id顺序 .SelectMany(group => group.OrderByDescending(item => item.Date)) // 每组内按日期降序,再平铺成列表 .ToList();
这个方法会先把原列表按Id分成一个个小组,因为原列表已经是按Id排序的,分组后的顺序还是8、7、6,接着每个小组内把日期从新到旧排序,最后把所有小组的元素拼接起来,就得到你期望的结果啦。
处理后的最终列表如下:
- 8 Scheduled Call - June 12, 2018
- 7 Activation - June 6, 2018
- 7 Activation - June 5, 2018
- 7 Activation - June 4, 2018
- 6 Mail - June 1, 2018
内容的提问来源于stack exchange,提问作者Arianule
相关产品推荐
相关产品推荐

