使用LINQ更改列类型对数据表进行排序 [英] Sorting a datatable by changing column type using LINQ

查看:107
本文介绍了使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆