C# DataTable转实体类
更新时间:2020-05-01 22:56public static class DataTableExtensions { /// <summary> /// dataTable转实体 注意dataTable列要与实体类数据类型一样 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="table"></param> /// <returns></returns> public static T ToEntity<T>(this DataTable table) where T : new() { T entity = new T(); foreach (DataRow row in table.Rows) { foreach (var item in entity.GetType().GetProperties()) { if (row.Table.Columns.Contains(item.Name)) { if (DBNull.Value != row[item.Name]) { Type newType = item.PropertyType; //判断type类型是否为泛型,因为nullable是泛型类, if (newType.IsGenericType && newType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))//判断convertsionType是否为nullable泛型类 { //如果type为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换 System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(newType); //将type转换为nullable对的基础基元类型 newType = nullableConverter.UnderlyingType; } item.SetValue(entity, Convert.ChangeType(row[item.Name], newType), null); } } } } return entity; } public static List<T> ToEntities<T>(this DataTable table) where T : new() { List<T> entities = new List<T>(); if (table == null) return null; foreach (DataRow row in table.Rows) { T entity = new T(); foreach (var item in entity.GetType().GetProperties()) { if (table.Columns.Contains(item.Name)) { if (DBNull.Value != row[item.Name]) { Type newType = item.PropertyType; //判断type类型是否为泛型,因为nullable是泛型类, if (newType.IsGenericType && newType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))//判断convertsionType是否为nullable泛型类 { //如果type为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换 System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(newType); //将type转换为nullable对的基础基元类型 newType = nullableConverter.UnderlyingType; } item.SetValue(entity, Convert.ChangeType(row[item.Name], newType), null); } } } entities.Add(entity); } return entities; } }