如何订购日期部分?

时间:2012-02-05 19:11:12

标签: c# linq .net-4.0 lambda

我有一个DataColumn DateTime数据类型,我希望按年份按降序排列,然后按月降序排列。

这是我试过的:

table.AsEnumerable()
    .OrderByDescending(o => o.Field<DateTime>("MaxDateTaken").Year)
    .ThenByDescending(o => o.Field<DateTime>("MaxDateTaken").Month)

我收到了无效的强制转换错误,因为YearMonth都是int数据类型,但我在DateTime

中指定了<>

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

你不应该因此而犯错误 - 你确定该字段真的DateTime吗?

听起来你真的只想要

table.AsEnumerable()
     .OrderByDescending(o => o.Field<DateTime>("MaxDateTaken"))

无论如何,鉴于按年份和月份下降的顺序基本上按日期降序排序,除了它对“日”部分没有任何作用。你真的不想在订购中加入“日”部分吗?

答案 1 :(得分:1)

你为什么忽略这一天?它可以变得更简单:

table = table.AsEnumerable()
   .OrderByDescending(o => DateTime.Parse(o.Field<string>("MaxDateTaken")))

答案 2 :(得分:0)

我这样修好了:

table = table.AsEnumerable()
   .OrderByDescending(o => DateTime.Parse(o.Field<string>("MaxDateTaken")).Year)
   .OrderByDescending(o => DateTime.Parse(o.Field<string>("MaxDateTaken")).Month)