【问题标题】:Sort DateTime List by Time按时间排序 DateTime 列表
【发布时间】:2013-08-06 21:20:45
【问题描述】:

我有一个日期时间列表,如果可能,我想使用 lambda 表达式对其进行排序。

我的清单:

6/19/1979 8:00:00 AM
5/5/1980 7:00:00 PM
10/20/1982 5:00:00 PM
1/4/1984 6:00:00 AM

输出应该是这个顺序:

1/4/1984 6:00:00 AM 
6/19/1979 8:00:00 AM
10/20/1982 5:00:00 PM
5/5/1980 7:00:00 PM

【问题讨论】:

  • 对于以后的帖子,请尽量避免标题中的标签和各种“感谢信”。欢迎在meta 上讨论
  • 奇怪的是这个问题中使用的日期和这个页面上的相同:dotnetperls.com/sort-datetime

标签: c# list sorting datetime lambda


【解决方案1】:

简单地说,OrderByTimeOfDay

var list = dateList.OrderBy(x => x.TimeOfDay).ToList(); 
// ToList added in response to comment.

【讨论】:

  • 当我使用您的方法时,我收到此错误:“无法将类型 'System.Linq.IOrderedEnumerable' 隐式转换为 'System.Collections.Generic.List' . 存在显式转换(您是否缺少演员表?)“代码:时间是 List: Times = Times.OrderBy(x => x.TimeOfDay);
  • @user2138160 在末尾添加ToList 调用。我会更新我的答案。
【解决方案2】:

只有当所有日期都相同时,以上才有效,如果日期也不同,您应该执行以下操作...

var sortedDates = dates.OrderByDescending(x => x);

否则不想用,或者不知道Linq那么你可以去关注..

static List SortAscending(List list)
{
list.Sort((a, b) => a.CompareTo(b));
return list;
}

static List SortDescending(List list)
{
list.Sort((a, b) => b.CompareTo(a));
return list;
}

【讨论】:

  • 请注意,OP 发布的示例数据忽略了日期,而是考虑了时间。
  • 这个 linq 解决方案实际上是唯一对我有用的解决方案。另一个没有很好地排序 Datetime 我添加了 .last() 以获取最旧的更新,当其他没有时它运行良好。跨度>
【解决方案3】:
var result=dates.OrderBy(d=>d-d.Date);

【讨论】:

    【解决方案4】:

    使用这个解决方案

    list<DateTime> YourList=new  list<DateTime> ();
    .
    .
    .
    YourList.OrderByDescending(x=>x.Date).ThenByDescending(x=>x.TimeOfDay).ToList()   
    

    【讨论】:

      【解决方案5】:

      list.Sort((a, b) =&gt; a.CompareTo(b));list 变量在哪里。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-09
        • 1970-01-01
        • 1970-01-01
        • 2017-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多