DataTable转换成实体类
/// <summary> /// DataTable转换成实体类 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dt"></param> /// <returns></returns> public static List<T> TableToEntity<T>(DataTable dt) where T : class, new() { //Type type = typeof(T); List<T> list = new List<T>(); try { foreach (DataRow row in dt.Rows) { T entity = new T(); PropertyInfo[] pArray = entity.GetType().GetProperties(); foreach (PropertyInfo p in pArray) { if (dt.Columns.Contains(p.Name)) { if (!p.CanWrite) continue; var value = row[p.Name]; if (value != DBNull.Value) { Type targetType = p.PropertyType; Type convertType = targetType; if (targetType.IsGenericType && targetType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) { //可空类型 NullableConverter nullableConverter = new NullableConverter(targetType); convertType = nullableConverter.UnderlyingType; } if (!string.IsNullOrEmpty(convertType.FullName) && !string.IsNullOrEmpty(value.ToString())) { value = Convert.ChangeType(value, convertType); } switch (convertType.FullName) { case "System.Decimal": p.SetValue(entity, Convert.ToDecimal(value), null); break; case "System.String": p.SetValue(entity, Convert.ToString(value), null); break; case "System.Int32": p.SetValue(entity, Convert.ToInt32(value), null); break; case "System.Int64": p.SetValue(entity, Convert.ToInt64(value), null); break; case "System.Int16": p.SetValue(entity, Convert.ToInt16(value), null); break; case "System.Double": p.SetValue(entity, Convert.ToDouble(value), null); break; case "System.Single": p.SetValue(entity, (float)value, null); break; case "System.DateTime": p.SetValue(entity, Convert.ToDateTime(value), null); break; default: p.SetValue(entity, value, null); break; } } } } list.Add(entity); } } catch (Exception ex) { } return list; }
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术