排序不适用于“2013”​​年度

时间:2013-01-03 07:55:42

标签: c# linq sorting

我将不同的List组合成一个如下:

List<Tweet> tweets = new List<Tweet>();

foreach (string TID in TypeIDList)
{
    List<Tweet> lt = new List<Tweet>();
    ......
    tweets = tweets.Concat(lt).OrderByDescending(x => x.TwitTime).ToList();
}

return tweets.OrderByDescending(x => x.TwitTime).ToList();

因此,在结果中,除了“2013”​​中的日期

之外,所有内容都按降序排序

1/1/2013 12:43:15 PM

所以这些日期是在最后而不是在最初。

我不知道为什么会这样。

2 个答案:

答案 0 :(得分:5)

我猜TwitTimestring,在这种情况下,如果您想在不进行解析的情况下进行搜索,则需要"yyyy/MM/dd hh:mm:ss"这样的格式。简单地说,如果最重要的部分(年份)位于右侧,则按字母顺序排序不起作用。

但是:更好的方法是:将其存储在DateTime中 - 这将安全排序。

答案 1 :(得分:5)

排序string时,通常会按字典顺序对它们进行比较,这意味着所有以数字1开头的字符串都会在一起:

1
10
2
3
...

在对日期或时间进行排序时,您可以使用ISO8601个日期,例如2013-01-01 12:34:23,这恰好按字典顺序排序。许多平台和语言也支持您可以使用的正确的日期比较功能。