使用LINQ更改列类型对数据表进行排序 [英] Sorting a datatable by changing column type using LINQ
本文介绍了使用LINQ更改列类型对数据表进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想对一个数据表字符串列进行排序,但是列的日期格式为(mm / dd / yyyy)。
我尝试了什么:
我试过以下但数据没有按有效顺序排序。
I want to sort a datatable string column but column having date in (mm/dd/yyyy) format.
What I have tried:
I tried following but the data is not getting sorted in valid order.
dtData = dtData.AsEnumerable().OrderByDescending(r => (Convert.ToDateTime(r.Field<string>(ColumnName)))).CopyToDataTable();
推荐答案
使用 DateTime.ParseExact方法 [ ^ ]
use DateTime.ParseExact Method [^]
dt = dt.AsEnumerable().OrderByDescending(r => (DateTime.ParseExact(r["DateColumnName"] + "", "mm/dd/yyyy", CultureInfo.InvariantCulture))).CopyToDataTable();
如果您担心 null
或其他字符串数据然后 DateTime.TryParseExact Method [ ^ ]将是最好的选择
if you are worried about null
or other string data then DateTime.TryParseExact Method [^] would be the best choice
DataTable dt = new DataTable();
dt.Columns.Add("DateColumnName");
dt.Rows.Add("11/14/2017");
dt.Rows.Add("11/13/2017");
dt.Rows.Add("11/16/2017");
dt.Columns.Add("NewColumnTemp");
dt.AsEnumerable().ToList().ForEach(row =>
{
string date = row["DateColumnName"] + "";
DateTime dateTemp;
DateTime? dateTempNull = null;
bool isValid = DateTime.TryParseExact(date, "mm/dd/yyyy", CultureInfo.CurrentCulture, DateTimeStyles.None, out dateTemp);
row["NewColumnTemp"] = isValid ? dateTemp : dateTempNull;
});
DataView dv = dt.DefaultView;
dv.Sort = "NewColumnTemp desc";
dt = dv.ToTable();
dt.Columns.Remove("NewColumnTemp");
这篇关于使用LINQ更改列类型对数据表进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文