我有一个
带日期的。
我的清单是:
{"01/01/2013","10/01/2013","20/01/2013"}我想对列表进行排序,如下所示:
{"20/01/2013","10/01/2013","01/01/2013"}我该怎么做呢?
发布于 2013-02-03 07:43:46
使用linq:
var list = new List {"01/01/2013", "10/01/2013", "20/01/2013"};
var orderedList = list.OrderByDescending(x => DateTime.Parse(x)).ToList();更新(根据评论中的问题):
您可以这样处理无效日期(无效日期被视为
):
var list = new List { "01/01/2013", "10/01/2013", "N/A" , "20/01/2013" };
var orderedList2 = list.OrderByDescending(x =>
{
DateTime dt;
DateTime.TryParse(x, out dt);
return dt;
});或者,如果您希望将无效的日期时间作为列表中的第一项:
var orderedList3 = list.OrderByDescending(x =>
{
DateTime dt;
if (!DateTime.TryParse(x, out dt)) return DateTime.MaxValue;
return dt;
});您还可以过滤掉无效的日期:
var filteredList = list.Where(x =>
{
DateTime dt;
return DateTime.TryParse(x, out dt);
}).Select(DateTime.Parse).OrderByDescending(x => x);或者更好:
var filteredList = list.Select(x =>
{
DateTime dt;
return new {valid = DateTime.TryParse(x, out dt), date = dt};
}).Where(x => x.valid).Select(x => x.date).OrderByDescending(x => x);发布于 2013-02-03 07:43:25
您不应该使用数据的字符串表示形式-我们都生活在面向对象的世界中:)
最好的方法是将这些字符串转换为实际的DateTime对象,并通过linq以相反的顺序对它们进行排序:
var dates = Array.ConvertAll(dateStrings, x => DateTime.Parse(x));
return dates.OrderByDesc(x => x);另一种方法是实现自定义排序函数,请参阅
此链接
..。然后,您只需在排序函数中使用它:
DateAsStringComparer myComparer = new DateAsStringComparer();
dateStrings.Sort(myComparer);发布于 2013-02-03 07:48:02
试试这个:
List s = new List() { "01/01/2013", "10/01/2013", "20/01/2013" };
var d = s.OrderByDescending(i => DateTime.ParseExact(i, "dd/MM/yyyy", null));https://stackoverflow.com/questions/14667754
复制相似问题