在Linq中按字符串的子字符串排序

时间:2013-05-03 10:52:37

标签: string linq sorting

我有一个日期字段,我将数据库的值从datetime转换为字符串格式(“dd-MMM-yyyy”),我需要对此字符串日期字段进行排序,但看起来就像我一直在做的那样排序,它正在工作,只检查日期,而不是月份,也不是年份。 所以当数据采用日期格式(数据库)时:

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

所以它的排序方式如

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

但它已分类:     29-JAN-2012     28-MAR-2013     01-JAN-2011

所以我想申请orderbydescending->然后通过>等等, 我需要将字符串从末尾拆分,是否有办法解决?  我在做:

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

3 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

使用日期时,事情变得更容易。首先,我将着眼于从数据库中获取日期而不转换为字符串。如果失败了你可以这样做......

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

答案 2 :(得分: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并将其转换为最后一个字符串。