C#反射实现将DataTable转换为List<T>
2018-05-21 15:59
661 查看
最近工作做经常需要将datatable转换成List,如果通过foreach循环datatable.Rows转换效率很低下也很枯燥,于是写了个通过反射自动转换的代码,大大提高了效率
1 public static List<T> DataTableToList<T>(DataTable dt) 2 { 3 List<T> list = new List<T>(); 4 foreach (DataRow row in dt.Rows) 5 { 6 T model = Activator.CreateInstance<T>(); 7 Type typeinfo = typeof(T); 8 foreach (var prop in typeinfo.GetProperties()) 9 { 10 if (dt.Columns.Contains(prop.Name)) 11 { 12 var o = To(row[prop.Name], prop.PropertyType); 13 prop.SetValue(model, o, null); 14 } 15 } 16 list.Add(model); 17 } 18 return list; 19 } 20 21 22 /// <summary> 23 /// 将一个值转换成目标类型。 24 /// </summary> 25 public static object To(object value, Type destinationType) 26 { 27 return To(value, destinationType, CultureInfo.InvariantCulture); 28 } 29 30 /// <summary> 31 /// 将一个值转换成目标类型. 32 /// </summary> 33 public static object To(object value, Type destinationType, CultureInfo culture) 34 { 35 if (value != null) 36 { 37 var sourceType = value.GetType(); 38 39 var destinationConverter = TypeDescriptor.GetConverter(destinationType); 40 if (destinationConverter != null && destinationConverter.CanConvertFrom(value.GetType())) 41 return destinationConverter.ConvertFrom(null, culture, value); 42 43 var sourceConverter = TypeDescriptor.GetConverter(sourceType); 44 if (sourceConverter != null && sourceConverter.CanConvertTo(destinationType)) 45 return sourceConverter.ConvertTo(null, culture, value, destinationType); 46 47 if (destinationType.IsEnum && value is int) 48 return Enum.ToObject(destinationType, (int)value); 49 50 if (!destinationType.IsInstanceOfType(value)) 51 return Convert.ChangeType(value, destinationType, culture); 52 } 53 return value; 54 }
相关文章推荐
- 利用反射实现DataTable 与 List<T> 转换
- 利用反射实现DataTable 与 List<T> 转换
- C#使用反射将DataTable转换List<T>
- 路由其实也可以很简单-------Asp.net WebAPI学习笔记(一) ASP.NET WebApi技术从入门到实战演练 C#面向服务WebService从入门到精通 DataTable与List<T>相互转换
- C# DataTable 转换成List<T>
- c# Json List<T> DataTable 数据相互转换
- c# 反射得到实体类的字段名称和值,DataTable转List<T>
- c# Json List<T> DataTable 数据相互转换
- C# 中 Ilist<T> 转换成 DataTable
- c# Json List<T> DataTable 数据相互转换
- 通过反射把list<T>转换成datatable,kill进程,事务传入一个Lst<String>多条sql语句
- c# Json List<T> DataTable 数据相互转换
- c# 反射得到实体类的字段名称和值,DataTable转List<T>
- 将DataTable转换成List<T>实现思路及示例代码
- 将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据
- c# 反射得到实体类的字段名称和值,DataTable转List<T>
- C#将DataTable转换成单个T实体和List<T>集合
- c# Json List<T> DataTable 数据相互转换
- C# DataTable 转换成List<T>
- c# Json List<T> DataTable 数据相互转换