2013-05-03 38 views
0

我有一个日期字段,我将数据库的值从日期时间转换为字符串格式(“dd-MMM-yyyy”),我需要执行排序此字符串日期字段,但好像当我一直在进行分类时,它正在工作,只检查日期,而不是一个月,也不是一年。 所以当数据在日期格式(数据库):在Linq的字符串的子字符串排序

2012-01-29 
2011-01-01 
2013-03-28 

所以它是排序像

2013-03-28 
2012-01-29 
2011-01-01 

但它的排序: 29-JAN-2012 28月2013 01-Jan-2011

所以我想应用orderbydescending-> then by->等,我需要从最后分割字符串,有没有办法解决? 我在做:

List<c> lst=lst.OrderByDescending(d=>d.TDate.Substring(d.TDate.LastIndexOf('-').toList(); 

回答

1

这个怎么样,

List<string> lst= new List<string>{"29-Jan-2012", "28-Mar-2013", "01-Jan-2011","2011-01-01","2013-03-28"}; 
lst.OrderByDescending(x=>DateTime.Parse(x)); 

您的样品中它应该是,

lst.OrderByDescending(x=>DateTime.Parse(x.TDate)) 
+0

感谢您的接受,并希望您会投票回答 – 2013-05-03 20:09:16

+1

肯定的好友!我也投了赞成票。 – 2013-05-06 06:03:50

0

当你使用日期时事情会更容易。首先,我会考虑从数据库中获取日期而不转换为字符串。如果失败,如果您想订购像一个日期的字符串,你可以做到这一点...

lst.OrderByDescending(d=>DateTime.Parse(d.TDate)) 
+0

我一直在做同样的,但后来在会话时,文本作为一个字符串,然后我需要在会话中进行排序,其中格式显然是字符串。 – 2013-05-03 11:03:37

0

,其解析到DateTime

List<c> lst = lst 
    .Select(x => new { Obj = x, Date = DateTime.Parse(x.TDate) }) 
    .OrderByDescending(x => x.Date) 
    .Select(x => x.Obj).ToList(); 

更妙的是,存储DateTime摆在首位并将其转换为最后一个字符串。

+0

@ItiTyagi:我不明白你的意见。 – 2013-05-04 08:52:31