按降序排序带有日期的C#列表(2015年9月11日 - >日期格式)?

时间:2016-07-19 11:02:10

标签: c# sorting date

indexlist = saveList
    .Where(i => (Convert.ToDateTime(i.event_startdate) < DateTime.Today) 
             && (Convert.ToDateTime(i.event_endDate)   < DateTime.Today))
    .ToList();
Event_list.ItemsSource = indexlist.OrderBy(i => i.event_startdate);

我编写了上面的代码来对包含此格式的日期的列表进行排序(2015年9月11日),我想按照它的方式对其进行排序,它应该在列表顶部显示最近的日期日期。 如何修改上述声明

我尝试过使用OrderByDescending(i=>i.event_startdate);但没有用。

2 个答案:

答案 0 :(得分:2)

您是按转换后的DateTime过滤了这些项目,但是您要通过string / object对其进行排序。您可以将DateTime存储在anoymous类型中:

indexlist = saveList
    .Select(i => new { 
        event = i, 
        event_startdate = Convert.ToDateTime(i.event_startdate),
        event_endDate   = Convert.ToDateTime(i.event_endDate),
    })
    .Where(x => x.event_startdate < DateTime.Today && x.event_endDate < DateTime.Today)
    .OrderByDescending(x => x.event_startdate)
    .Select(x => x.event)
    .ToList();
Event_list.ItemsSource = indexlist;

答案 1 :(得分:1)

您需要将日期解析为DateTime对象以便按其排序,然后事情会很简单:

var results = (from item in saveList
                let dtStart = Convert.ToDateTime(item.event_startdate)
                let dtEnd = Convert.ToDateTime(item.event_endDate)
                where dtStart.Date < DateTime.Today && dtEnd.Date < DateTime.Today
                orderby dtStart descending
                select item).ToList();

Event_list.ItemsSource = results;