备注:摘自网上 有附地址
public static List<T> DataTableToEntities<T>(this DataTable dt) where T : class, new(){if (null == dt || dt.Rows.Count == 0) { return null; }List<T> entities = new List<T>();List<string> columnNames = new List<string>();for (int i = 0; i < dt.Columns.Count; i++){columnNames.Add(dt.Columns[i].ColumnName);}foreach (DataRow row in dt.Rows){PropertyInfo[] pArray = typeof(T).GetProperties();T entity = new T();Array.ForEach<PropertyInfo>(pArray, p =>{if (!columnNames.Contains(p.Name)){return;}object cellvalue = row[p.Name];//空值不处理if (cellvalue == DBNull.Value){return;}if ((cellvalue == null) || string.IsNullOrWhiteSpace(cellvalue.ToString().Trim())){return;}if (cellvalue != DBNull.Value){//经过了几个版本的迭代,最后一个为最新的,摘自网上,已附原文地址//4、原地址:https://blog.csdn.net/Simon1003/article/details/80839744if (!p.PropertyType.IsGenericType){p.SetValue(entity, Convert.ChangeType(cellvalue, p.PropertyType), null);}else{Type genericTypeDefinition = p.PropertyType.GetGenericTypeDefinition();if (genericTypeDefinition == typeof(Nullable<>)){p.SetValue(entity, Convert.ChangeType(cellvalue, Nullable.GetUnderlyingType(p.PropertyType)), null);}else{throw new Exception("genericTypeDefinition != typeof(Nullable<>)");}}//3、原地址:https://blog.csdn.net/hebbers/article/details/78957569//Type type = p.PropertyType;//if (type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))//判断convertsionType是否为nullable泛型类 //{// //如果type为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换// System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(type);// //将type转换为nullable对的基础基元类型// type = nullableConverter.UnderlyingType;//}//p.SetValue(entity, Convert.ChangeType(cellvalue, type), null);//2、自定义 这种很傻,但当前解决速度最快//if (p.PropertyType.Name.Equals("Int32"))//{// p.SetValue(entity, Convert.ToInt32(value), null);//}//else if (p.PropertyType.Name.Equals("String"))//{// p.SetValue(entity, Convert.ToString(value), null);//}//else if (p.PropertyType.Name.Equals("Nullable`1"))//{// p.SetValue(entity, Convert.ToInt32(value), null);//}////其它类型 暂时不管 //1、字段不为空可以用这种//p.SetValue(entity, value, null); }});entities.Add(entity);}return entities;}