那此篇,将是学习反向,把DataTable转换为List<T>。这个方法使用的较多。很多情况之后,从数据读出来的数据是DataSet或是DataTable。需要把它们转换为List<T>之后,再转换为json。
下面Insus.NET写一个扩展方法:
public static List<T> ToList<T>(this DataTable dt) { var dataColumn = dt.Columns.Cast<DataColumn>().Select(c => c.ColumnName).ToList(); var properties = typeof(T).GetProperties(); string columnName = string.Empty; return dt.AsEnumerable().Select(row => { var t = Activator.CreateInstance<T>(); 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<Ay> ays = dt.ToList<Ay>(); ays.ForEach(delegate (Ay ay) { Console.WriteLine(ay.ToString()); }); Console.WriteLine("\n\r"); } }
Source Code
上图红框即是#23行代码,就是本篇的核心代码,把DataTable转换为List<T>。
在控制台测试一下代码:
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦