当前位置: 首页 > 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.hskmm.com/?act=detail&tid=40524

相关文章:

  • 数据交互与消息优化:Air8000 Modbus通信消息设计之道
  • 点云配准 Deep closest point: Learning representations for point cloud registration, - MKT
  • 点云配准 GeoTransformer - MKT
  • 特征提取器 PointNet++ - MKT
  • 语义slam Fusion++ - MKT
  • 第七周第一天7.1
  • 第七周第二天7.2
  • 第六周第五天6.5
  • Docker安装DPanel(docker容器管理工具)
  • 10.28
  • 2025 年最佳AI智能企业知识管理工具推荐
  • 制造业设备管理的三个坑,90% 的工厂都踩过
  • 移动端性能监控探索:可观测 Android 采集探针架构与实现
  • 【硬件测试】基于FPGA的8PSK+帧同步系统开发与硬件片内测试,包含高斯信道,误码统计,可设置SNR
  • KPI绩效考核系统软件:让绩效管理由“难”变“易”的核心密钥
  • CompleteMaintenance点检提交反复超时,日志显示执行中断
  • day11
  • 2025年建站AI工具TOP10盘点:从ChatGPT到Lynx的智能革命
  • prometheus监控体系搭建
  • 为何AI反诈骗防护比以往任何时候都更重要
  • 2025 年最受欢迎的 50 款免费 AI 工具,无免费增值、无付费计划或无每日信用额度限制
  • ICPC Nanjing Regional (部分题题解)
  • 高级语言程序设计课程第三次个人作业
  • Elasticsearch Hot Threads
  • P6147 [USACO20FEB] Delegation G 题解
  • AI元人文:大语言模型、世界模型与AI元人文模型的文明三重奏
  • MySQL 数据加密整改文档(TDE + 字段加密 + 密码哈希)
  • 2025年北京无人机执照培训机构推荐榜,caac无人机执照培训机构/caac无人机执照培训基地/聚焦企业服务品质与专业培训能力深度剖析
  • 2025年港口动态沙盘模型厂家 权威推荐榜单:物流教学实训沙盘/港口演示实训模型/智能港口实训模型源头厂家精选
  • 2025年U型科氏质量流量计最新推荐榜:微弯型科氏质量流量计/直管型科氏质量流量计/科氏质量流量计助力产业智能化升级