当前位置: 首页 > 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.jsqmd.com/news/25599/

相关文章:

  • leetcode|700二叉搜索树中的搜索|938二叉搜索树的范围和|530二叉搜索树的最小绝对差
  • 2025年合同纠纷律师联系电话推荐:靠谱律师一次找全
  • 2025年合同纠纷律师联系电话推荐:权威律师名单
  • 2025年合同纠纷律师联系电话推荐:高效沟通赢在起点
  • 2025年10月绩效管理咨询公司榜单:五强落地模式与口碑盘点
  • 学习 跟“龙哥”学C语言编程 [李志龙].pdf
  • 2025年10月绩效管理咨询公司榜单:五强对比与落地指南 。
  • 2025年10月绩效管理咨询公司推荐:实力榜单与选型指引
  • 2025年10月精益制造咨询公司推荐:价值榜综合评测
  • 2025年10月智能工厂规划咨询公司推荐:权威评测排行
  • 2025年10月智能工厂规划咨询公司推荐:五强排行与选择指南
  • 2025年10月智能工厂规划咨询公司推荐:品牌榜横向评测
  • 热管理控制器TMS HiL解决方案
  • 2025年10月精益制造咨询公司推荐:实力榜单深度评测
  • 2025年10月绩效管理咨询公司榜单:五强对比与落地指南
  • 2025年10月智能工厂规划咨询公司推荐:精选榜单一键查
  • 2025年10月北京商业工装设计公司排行榜:基于真实数据的专业推荐
  • 【科普系列】TCP 协议:数据传输的“可靠卫士”
  • 2025年10月北京商业工装设计公司推荐榜单:权威评测与选择指南
  • 2025年10月北京商业工装设计公司评价指南:权威排行与选择建议
  • 2025年10月北京商业工装设计公司推荐榜单与选择指南
  • 【日记】好耶!是新电脑!(3959 字)
  • 详细介绍:网络爬虫技术规范与应用指南系列(xc—1)
  • MongoDB到关系型数据库:JSON字段如何高效转换? - 实践
  • 2025年GEO优化公司推荐榜:深圳艺果传媒五星领跑!多平台本地化适配 + 数据驱动,3 家企业凭细分优势显实力
  • 2025年值得关注的温室大棚厂家企业推荐:技术与服务双优之选,蔬菜大棚,花卉大棚,单栋大棚厂家推荐
  • 从环保到美学:2025年艺术涂料厂家的消费逻辑与行业进化,意大利进口艺术涂料,进口艺术涂料厂家推荐
  • 2025年矿物铸件厂家推荐榜:南通盟鼎公司五星突围!35000 吨产能覆盖多领域设备床身,3 家企业凭高精 / 耐腐 / 高性价比筑品质根基
  • 2025年上海装修公司权威推荐榜:老房翻新/毛胚改造/局部装修/设计施工/现代简约/奶油法式/全包半包/自住出租/婚房公寓/别墅大宅/办公室餐饮装修
  • 2025密集型/智能/高容量密集型/防潮防腐/多层抽屉式/实验室/切片蜡块柜公司推荐榜:北京中宝元五星领跑,科研样本安全储存有方案,2 家企业各具特色