按DataTable中的datetime对字符串列进行排序

时间:2014-01-21 05:38:40

标签: c# linq

我正在尝试按DataTablestring列上的DateTime进行排序。

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

我已经尝试了DefaultViewLINQ的基础知识,但不会占上风。

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

创建DataTable时尝试添加

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

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

<强>(OR)

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

答案 2 :(得分:0)

如果您使用格式YYYYMMDD

,则可以将日期排序为字符串

答案 3 :(得分:0)

        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;