【问题标题】:Sort a string column by datetime in a DataTable在 DataTable 中按日期时间对字符串列进行排序
【发布时间】:2014-01-21 05:38:39
【问题描述】:

我正在尝试按DateTimestring 列上的DataTable 进行排序。

由于各种原因,该列必须保留为string 数据类型。我知道我可以将数据复制到另一个表中,将该列转换为 DateTime 列,对其进行排序并将其复制回来,但我想知道是否有更简洁的方法。

我已经尝试了DefaultViewLINQ 的基础知识,但没有成功。

【问题讨论】:

  • 字符串的格式是什么?是dd/MM/yyyy 还是别的什么?
  • 没有明确的格式,几乎任何 DateTime.Parse 都可以。

标签: c# linq


【解决方案1】:

在创建数据表时尝试添加

    table.Columns.Add("dateValue", typeof(DateTime?));

    var orderedRows = from row in dt.AsEnumerable()
                      orderby  row.Field<DateTime>("Date")
                      select row; 
    DataTable tblOrdered = orderedRows.CopyToDataTable();

(或)

 var orderedRows = from row in dt.AsEnumerable()
                      let date = DateTime.Parse(row.Field<string>("Date"), CultureInfo.InvariantCulture)
                      orderby date 
                      select row;

【讨论】:

    【解决方案2】:

    在我发布后立即偶然发现了一种方法。

    EnumerableRowCollection<DataRow> query = from row in dataTable.AsEnumerable()
                                             orderby DateTime.Parse(row.Field<string>(propertyName)) ascending
                                             select row;
    dataTable = query.AsDataView().ToTable();
    

    【讨论】:

      【解决方案3】:

      如果使用YYYYMMDD格式,则可以将日期排序为字符串

      【讨论】:

      • 我的值是字符串,甚至可能是 Jun-99、Jun-00 之类的。基本上需要将它们转换为日期,排序为日期,一次将它们输出为字符串。
      • 好的。通过指定格式使用 DateTime.ParseExact 在 C# 中解析它们,转换为 DateTime 后应该没问题
      • 不完全是.. 这将按月、日和年排序,例如"01012001", "01012002", "01022001" 将按01012001, 01012002, 01022001 排序。要正确订购,我会选择格式yyyyMMdd
      【解决方案4】:
              List<DataRow> rows = new List<DataRow>();
              foreach (DataRow row in table.Rows)
              {
                  rows.Add(row);
              }
              rows.Sort((r1,r2)=>DateTime.Parse((string)r1["columnname"]).CompareTo(DateTime.Parse((string)r2["columnname"])));
              var clone = table.Clone();
              rows.ForEach(r => clone.Rows.Add(r.ItemArray));
              return clone;
      

      【讨论】:

        猜你喜欢
        • 2018-07-07
        • 1970-01-01
        • 2020-12-22
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 2022-01-24
        相关资源
        最近更新 更多