我正在尝试按DataTable
对string
列上的DateTime
进行排序。
由于各种原因,该列必须保留为string
数据类型。我知道我可以将数据复制到另一个表中,将该列转换为DateTime
列,对其进行排序并将其复制回来,但我想知道是否有更简洁的方法。
我已经尝试了DefaultView
和LINQ
的基础知识,但不会占上风。
答案 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;