按日期排序列表最接近现在但不是旧日期

时间:2018-04-22 13:32:46

标签: c# list sorting

我有一个列表,其中包含我想按照以下方式排序的日期:

  • 今天的日期应该排在最前面
  • 将来的日期应按今天最近的日期排序(例如今天= 8日,我们的日期18,9,11应排序=>> 9,11,18)
  • 今天日期之前的日期应列在降序列表的底部。

这样做的最佳方法是什么??:

  • 是否要创建未来列表,

  • 旧列表和当前列表然后连接并对它们进行排序?

  • 或者我能以更好的方式实现这一目标吗?

为了使这个更清晰这就是排序列表看起来像的样子:

today =>明天=>后天=>未来几天.... =>昨天=>比昨天更老了

enter image description here

1 个答案:

答案 0 :(得分:3)

var dates = new List<DateTime>()
{
    DateTime.Today,
    DateTime.Today.AddDays(1),
    DateTime.Today.AddDays(-2),
    DateTime.Today.AddDays(5),
    DateTime.Today.AddDays(-5)
};
  

今天的日期应该排在最前面

DateTime today = dates.Where(x => x == DateTime.Today).First();
  

将来的日期应按今天最近的日期排序(例如今天= 8日,我们的日期18,9,11应排序=&gt;&gt; 9,11,18)

List<DateTime> futureDates = dates.Where(x => x > today).ToList();
futureDates.Sort();
  

今天年龄较大的日期应该列在降序列表的底部。

List<DateTime> oldDates = dates.Where(x => x < today).OrderByDescending(x => x).ToList();

这是最终的汇总结果:

var final = new List<DateTime>();
final.Add(today);
final.AddRange(futureDates);
final.AddRange(oldDates);

<== Fiddle ==>