当前位置: 首页 > news >正文

DataTable所有数据转换成实体类列表

需要注意:此方法必须新建一个实体类文件,刚好对应你的DataTable所有列名字

 1  /// <summary>
 2  /// DataTable所有数据转换成实体类列表
 3  /// </summary>
 4  /// <typeparam name="T">实体类</typeparam>
 5  /// <param name="dt">DataTable</param>
 6  /// <returns>返回实体类列表</returns>
 7  public static List<T> DataTableToList<T>(DataTable dt) where T : new()
 8  {
 9      if (dt == null || dt.Rows.Count == 0)
10      {
11          return new List<T>();
12      }
13      // 实例化实体类和列表
14      List<T> list = new List<T>();
15      // 获取所有列
16      DataColumnCollection columns = dt.Columns;
17      foreach (DataRow dr in dt.Rows)
18      {
19          T t = new T();
20          // 获得实体类的所有公共属性
21          PropertyInfo[] propertys = t.GetType().GetProperties();
22 
23          //循环比对且赋值
24          foreach (PropertyInfo pi in propertys)
25          {
26              string name = pi.Name;
27              Type targetType = pi.PropertyType;
28              Type convertType = targetType;
29              // 检查DataTable是否包含此列    
30              if (columns.Contains(name))
31              {
32                  if (!pi.CanWrite) continue;
33 
34                  object value = dr[name];
35                  if (targetType.IsGenericType && targetType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
36                  {
37                      //可空类型
38                      NullableConverter nullableConverter = new NullableConverter(targetType);
39                      convertType = nullableConverter.UnderlyingType;
40                  }
41                  if (!string.IsNullOrEmpty(convertType.FullName) && !string.IsNullOrEmpty(value?.ToString()))
42                  {
43                      value = Convert.ChangeType(value, convertType);
44                  }
45                  if (value != DBNull.Value)
46                  {
47                      //是否需要转化
48                      //if (value is int || value is float || value is decimal || value is double)
49                      //{
50                      //    p.SetValue(t, value.ToString(), null);
51                      //}
52                      //else
53                      //{
54                      //    p.SetValue(t, value, null);
55                      //}
56                      pi.SetValue(t, value, null);
57                  }
58              }
59          }
60          list.Add(t);
61      }
62      return list;
63  }

转载请注明出处,谢谢!

http://www.gsyq.cn/news/33845.html

相关文章:

  • 2025年合同纠纷律师联系电话推荐:靠谱律师一次找全
  • 2025年合同纠纷律师联系电话推荐:高效沟通赢在起点
  • 2025年10月智能工厂规划咨询公司推荐:五强排行与选择指南
  • 2025年10月智能工厂规划咨询公司推荐:精选榜单一键查
  • 2025年10月北京商业工装设计公司推荐榜单:权威评测与选择指南
  • 详细介绍:网络爬虫技术规范与应用指南系列(xc—1)
  • 从环保到美学:2025年艺术涂料厂家的消费逻辑与行业进化,意大利进口艺术涂料,进口艺术涂料厂家推荐
  • 2025年上海装修公司权威推荐榜:老房翻新/毛胚改造/局部装修/设计施工/现代简约/奶油法式/全包半包/自住出租/婚房公寓/别墅大宅/办公室餐饮装修
  • 2025年不锈钢铸造厂家推荐榜:兴化德邺五星突围!800 吨年产量适配多场景,3 家企业凭精密 / 耐腐 / 高性价比筑品质根基
  • 在java中使用二维数组保存颜色值
  • 装修石材藏辐射?海鲜怕核污染?核辐射检测选对才有用,正点原子ND1核辐射检测仪到手,精度够硬,居家户外都能测!
  • QML学习笔记(二十二)QML的TextInput - 实践
  • C++内联函数inline及与宏使用的比较
  • vue2x添加一个元素拖拽功能
  • 直扩信号参数估计:载频、码速率和扩频增益
  • 2025 年防爆位移传感器厂家联系方式推荐,杭州浙达精益提供专业设备与可靠技术支持
  • 2025年振弦式频率读数仪609供货厂家权威推荐榜单:读数仪609/测读仪读数仪609/土木工程用609读数仪源头厂家精选
  • 直播|均降 40% 的 GPU 成本,大规模 Agent 部署和运维的捷径是什么?
  • 2025年户外面料厂家推荐排行榜:尼龙/涤纶/尼龙格子/珍珠点/登山布/户外速干/瑜伽/梭织/TR消光面料公司推荐
  • 2025年铝单板厂家推荐排行榜,氟碳铝单板,仿木纹铝单板,仿石材铝单板,幕墙装饰铝单板公司精选
  • 基于Matlab的深度堆叠自编码器(SAE)实现与分类应用
  • WComputer2027.1下载 WComputer2027.1 downloadWComputer2027.1ダウンロード
  • 2025 年工业不锈钢管,激光切割不锈钢管,铁管不锈钢管厂家最新推荐,产能、专利、环保三维数据透视
  • 2025 年不锈钢管圆筒,焊管不锈钢管,花纹不锈钢管,菱形不锈钢管厂家最新推荐,技术实力与市场口碑深度解析
  • 【大数据高并发核心场景实战】 数据持久化层 - 查询分离
  • 2025 保研辅导,保研机构,保研星途,保研规划机构最新推荐,聚焦资质、案例、售后的五家机构深度解读
  • 2025年气缸管厂家权威推荐榜:精密气缸管,不锈钢气缸管,珩磨气缸管,薄壁气缸管,焊接气缸管,冷拔气缸管,食品级气缸管,海洋用气缸管专业供应商
  • 20251029
  • 2025年反应釜厂家权威推荐榜:搪玻璃反应釜/搪瓷反应釜/开式闭式反应釜/非标搪玻璃反应釜专业选购指南
  • jmeter 创建100个现场组,每个线程组里面有1个http请求,http接口内容为读取CSV文件