【问题标题】:Sort DataTable based on date column(dd MMM yyyy)根据日期列对数据表进行排序(dd MMM yyyy)
【发布时间】:2013-07-26 07:59:37
【问题描述】:

我有一个数据集 ds,我需要根据列对相同 ds 的数据表进行排序,列名是日期。此列的值采用“dd MMM yyyy”格式。

【问题讨论】:

标签: c# .net sorting datatable dataset


【解决方案1】:

如果您无法将列类型更改为日期,请尝试以下 Linq 解决方案

var recs = dataset.Tables[0].AsEnumerable()
    .OrderBy(x =>DateTime.ParseExact(
             x.Field<string>("Date"),
                           "dd MMM yyyy", 
                           CultureInfo.InvariantCulture));

【讨论】:

  • 你有错字应该是 dd MM yyyy 和 DateTime.ParseExact() :) 好答案
  • @Onam 对不起,我没听懂你
  • 查看日期格式,将其转换为 dd MMM yyyy。注意代表一个月的 3 个字符。此外 DateTime.ParaseExact 拼写错误,只是注意到 CultureInfo.InvariantCultur 需要是 CultureInfo.InvariantCulture (注意末尾的“e”)。除了完美之外:)
  • @Onam - OP 有MMM,而不是MM。 @Damith - 你写的是 ParaseExact 而不是 ParseExact
  • @Onam 和 Corak,谢谢你们。
【解决方案2】:

这将是一个问题,特别是如果它是一张大桌子。当然,最好的答案是将列重新定义为日期类型。这样它将有效地排序和加入。但是,如果表格不大,您可以将日期字符串重新格式化为 ISO 格式 (YYYY-MM-DD),它会正确排序。您没有提及您使用的是哪个数据库,并且字符串和日期函数因平台而异:这是一个 SQL Server 示例:

 SELECT CAST([Date] AS Date) AS real_date,
        my_other_fields
   FROM MyTable

我在家里,所以我现在没有 SQL Server 来测试它(如果它不起作用,我可以在早上更新示例),但该日期格式解析起来非常明确,所以我希望演员阵容能够正常工作。

如果您想完全在应用程序端处理这个问题,编写一个字符串函数将重新排序日期字符串中的年、月和日应该是相当简单的。

【讨论】:

  • 其实我用的是sql server 2008。
  • @AnuBasheerA 我已经在我的回答中添加了一个 sn-p:我很确定它会按书面规定工作,但我一回到办公室就会确认。
  • @AnuBasheerA 而且,经过检查,演员表工作得很好(只要字符串格式正确)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
相关资源
最近更新 更多