博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Conversion Between DataTable and List in C#
阅读量:6072 次
发布时间:2019-06-20

本文共 2287 字,大约阅读时间需要 7 分钟。

1.List to DataTable

public static DataTable ToDataTable
(this IList
data) { DataTable dataTable = new DataTable(typeof(TSource).Name); PropertyInfo[] props = typeof(TSource).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (PropertyInfo prop in props) { dataTable.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType); } foreach (TSource item in data) { var values = new object[props.Length]; for (int i = 0; i < props.Length; i++) { values[i] = props[i].GetValue(item, null); } dataTable.Rows.Add(values); } return dataTable; }

2.DataTable To List

public static List
ToList
(this DataTable dataTable) where TSource : new(){ var dataList = new List
(); const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic; var objFieldNames = (from PropertyInfo aProp in typeof(TSource).GetProperties(flags) select new { Name = aProp.Name, Type = Nullable.GetUnderlyingType(aProp.PropertyType) ?? aProp.PropertyType }).ToList(); var dataTblFieldNames = (from DataColumn aHeader in dataTable.Columns select new { Name = aHeader.ColumnName, Type = aHeader.DataType }).ToList(); var commonFields = objFieldNames.Intersect(dataTblFieldNames).ToList(); foreach (DataRow dataRow in dataTable.AsEnumerable().ToList()) { var aTSource = new TSource(); foreach (var aField in commonFields) { PropertyInfo propertyInfos = aTSource.GetType().GetProperty(aField.Name); var value = (dataRow[aField.Name] == DBNull.Value) ? null : dataRow[aField.Name]; //if database field is nullable propertyInfos.SetValue(aTSource, value, null); } dataList.Add(aTSource); } return dataList;}

转载于:https://www.cnblogs.com/dongshuangjie/p/5460285.html

你可能感兴趣的文章
NAT几种方式实现
查看>>
html基本标签
查看>>
error code [17027]; 流已被关闭;
查看>>
Error:java: Compilation failed: internal java comp
查看>>
关于IE9导入证书,提示成功,但不生效。
查看>>
Linux删除目录下的文件的几种方法
查看>>
时间:2014年4月9日19:50:31 画矩形及饼状图
查看>>
java.lang.OutOfMemoryError: bitmap size exceeds VM budget
查看>>
影响孩子一生的好习惯——专注
查看>>
我的友情链接
查看>>
Oracle数据库实例核心技术解析_超越OCP精通Oracle视频教程培训05
查看>>
获取访客的IP、浏览器等信息
查看>>
Swing界面加载
查看>>
Vmware vsphere 5.5之系统安装
查看>>
python初学
查看>>
a伪类
查看>>
redis对set类型的操作
查看>>
Linux下Shell 备份脚本集合
查看>>
我的友情链接
查看>>
spring mvc 的搭建
查看>>