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

Linq分组匿名对象后DateTime排序失效问题(ThisDate为可空类型)

解决可空日期分组后排序异常的问题

你的代码中先对ThisDate降序再分组,但GroupBy操作不会保留原有的排序结果,后续的Distinct也可能进一步打乱顺序,导致最终列表无法按「年份降序、同年份下月份降序」的预期排列。另外,直接调用i.ThisDate.Value存在空引用风险,需要先过滤空值记录。

修正后的代码如下:

ThisDateList = await ctx.Table1
    .Where(i => i.ThisDate.HasValue) // 过滤空日期,避免Value调用报错
    .GroupBy(i => new { i.ThisDate.Value.Year, i.ThisDate.Value.Month })
    .OrderByDescending(g => g.Key.Year) // 按年份降序排序
    .ThenByDescending(g => g.Key.Month) // 同年份下按月份降序排序
    .Select(g => $"{g.Key.Year} {DateTimeFormatInfo.InvariantInfo.GetMonthName(g.Key.Month)}")
    .ToListAsync();

关键调整说明:

  • 增加Where(i => i.ThisDate.HasValue)过滤空日期,避免访问Value时触发空引用异常。
  • 分组后直接基于分组键的Year和Month做降序排序,确保结果严格遵循「最新年份→同年份下最新月份」的顺序。
  • 移除Distinct,因为GroupBy已经保证每个「年-月」组合唯一,无需额外去重。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:44:56