使用LINQ排序失效求助:附代码及dd-mm-yy日期格式说明
排查LINQ排序未生效的问题
嘿,我来帮你搞定这个排序失效的问题!结合你给出的代码和日期格式信息,大概率是以下几个原因之一,咱们一个个捋:
Issue_Date字段类型是字符串而非DateTime
这是最常见的坑!如果你的Issue_Date是string类型,LINQ的OrderBy会按字符串字典序排序,而不是日期逻辑顺序。比如"31-12-22 10:00:00 AM"会被认为比"01-01-23 09:00:00 AM"大,因为字符串比较是从左到右逐个字符比的,"3"比"0"大,完全不符合日期的先后逻辑。日期字符串格式解析不匹配
就算你打算转成DateTime排序,如果格式符写错了也会出问题。你用的是dd-mm-yy hh:mm:ss AM,这里要注意:mm代表分钟,月份应该用MM- AM/PM对应的格式符是
tt
格式字符串写错的话,要么解析失败,要么得到错误的日期,自然排序不对。
修正方案
把字符串类型的日期转成DateTime再排序,修改你的排序代码如下:
// 记得引入System.Globalization命名空间 Incomplete_issue_model = Incomplete_issue_model .OrderBy(d => DateTime.ParseExact(d.Issue_Date, "dd-MM-yy hh:mm:ss tt", CultureInfo.InvariantCulture)) .ToList();
如果担心有格式错误的日期导致崩溃,可以用TryParseExact做安全处理:
Incomplete_issue_model = Incomplete_issue_model .OrderBy(d => { DateTime.TryParseExact(d.Issue_Date, "dd-MM-yy hh:mm:ss tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out var date); return date; }) .ToList();
额外检查点
- 确认
Incomplete_issue_model里的Issue_Date没有空值或格式错误的条目,这些会影响排序结果 - 如果需要降序排序,把
OrderBy改成OrderByDescending就好
内容的提问来源于stack exchange,提问作者kevin patel
相关产品推荐
相关产品推荐

