ITPub博客

首页 > IT职业 > IT职场 > 把DataTable转换为List

把DataTable转换为List

IT职场 作者:wenlei 时间:2021-09-09 09:45:39 0 删除 编辑


那此篇,将是学习反向,把DataTable转换为List。这个方法使用的较多。很多情况之后,从数据读出来的数据是DataSet或是DataTable。需要把它们转换为List之后,再转换为json。

下面Insus.NET写一个扩展方法:
图片描述

 

 public static List ToList(this DataTable dt)        {            var dataColumn = dt.Columns.Cast().Select(c => c.ColumnName).ToList();            var properties = typeof(T).GetProperties();            string columnName = string.Empty;            return dt.AsEnumerable().Select(row =>            {                var t = Activator.CreateInstance();                foreach (var p in properties)                {                    columnName = p.Name;                    if (dataColumn.Contains(columnName))                    {                        if (!p.CanWrite)                            continue;                        object value = row[columnName];                        Type type = p.PropertyType;                        if (value != DBNull.Value)                        {                            p.SetValue(t, Convert.ChangeType(value, type), null);                        }                    }                }                return t;            }).ToList();        }

Source Code

 

接下来,手动创建一个DataTable,添加一些数据行。对象是引用前一篇的对象:

图片描述

 

 class Ba    {        public void ConvertDataTableToListToTestDemo()        {            DataTable dt = new DataTable();            dt.Columns.Add("ID", typeof(int));            dt.Columns.Add("Account", typeof(string));            dt.Columns.Add("Email", typeof(string));            dt.Rows.Add(1, "A0001", "A0001@email.com");            dt.Rows.Add(2, "A0002", "A0002@email.com");            dt.Rows.Add(3, "A0003", "A0003@email.com");            List ays = dt.ToList();            ays.ForEach(delegate (Ay ay)            {                Console.WriteLine(ay.ToString());            });                        Console.WriteLine("nr");        }    }

Source Code

 

上图红框即是#23行代码,就是本篇的核心代码,把DataTable转换为List。

 

在控制台测试一下代码:
图片描述

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3350/viewspace-2811881/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-30

  • 博文量
    77
  • 访问量
    712