使用反射将DataTable的数据转成实体类

利用反射避免了硬编码出现的错误,但是实体类的属性名必须和数据库名字对应(相同)

1、利用反射把DataTable的数据写到单个实体类

        /// <summary>///利用反射把DataTable的数据写到单个实体类/// </summary>/// <typeparam name="T">实体类(model)</typeparam>/// <param name="dtSource">DataTable数据源</param>/// <returns>返回的实体类对象</returns>public static T ToSingleEntity<T>(this System.Data.DataTable dtSource) where T : class, new(){if (dtSource == null){return default(T);}if (dtSource.Rows.Count != 0){Type type = typeof(T);Object entity = Activator.CreateInstance(type);         //创建实例               foreach (System.Reflection.PropertyInfo entityCols in type.GetProperties()){if (!string.IsNullOrEmpty(dtSource.Rows[0][entityCols.Name].ToString())){Type valType = entityCols.PropertyType;if (valType.IsGenericType && valType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))//判断convertsionType是否为nullable泛型类  
                        {//如果type为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换  System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(valType);//将type转换为nullable对的基础基元类型  valType = nullableConverter.UnderlyingType;}entityCols.SetValue(entity, Convert.ChangeType(dtSource.Rows[0][entityCols.Name], valType), null);//entityCols.SetValue(entity, dtSource.Rows[0][entityCols.Name], null);
                    }}return (T)entity;}return default(T);}

 

 

2、利用反射把DataTable的数据写到集合实体类里

 1         /// <summary>
 2         /// 利用反射把DataTable的数据写到集合实体类里
 3         /// </summary>
 4         /// <typeparam name="T">实体类(model)</typeparam>
 5         /// <param name="dtSource">DataTable数据源</param>
 6         /// <returns>返回IEnumerable的实体类对象</returns>
 7         public static IEnumerable<T> ToListEntity<T>(this System.Data.DataTable dtSource) where T : class, new()
 8         {
 9             if (dtSource == null)
10             {
11                 return null;
12             }
13 
14             List<T> list = new List<T>();
15             Type type = typeof(T);
16             foreach (System.Data.DataRow dataRow in dtSource.Rows)
17             {
18                 Object entity = Activator.CreateInstance(type);         //创建实例               
19                 foreach (System.Reflection.PropertyInfo entityCols in type.GetProperties())
20                 {
21                     if (!string.IsNullOrEmpty(dataRow[entityCols.Name].ToString()))
22                     {
23                         Type valType = entityCols.PropertyType;
24                         if (valType.IsGenericType && valType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))//判断convertsionType是否为nullable泛型类  
25                         {
26                             //如果type为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换  
27                             System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(valType);
28                             //将type转换为nullable对的基础基元类型  
29                             valType = nullableConverter.UnderlyingType;
30                         }
31                         entityCols.SetValue(entity, Convert.ChangeType(dataRow[entityCols.Name], valType), null);
32                     }
33                 }
34                 list.Add((T)entity);
35             }
36             return list;
37         }

 

 

用法:

1          static void Main(string[] args)
2         {
3             System.Data.DataSet ds = new System.Data.DataSet();
4             IEnumerable<User> model = ds.Tables[0].ToListEntity<User>();
5         }

 

转载于:https://www.cnblogs.com/linJie1930906722/p/5555928.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Andorid之KeyguardManager的介绍

android.app.KeyguardManager类用于对Keyguard进行管理&#xff0c;即对锁屏进行管理。 详细信息参考&#xff1a; http://blog.csdn.net/hudashi/article/details/7073373 下面的代码用来设定键盘锁和解锁 //声明键盘管理器并获取键盘的服务 KeyguardManager keyguardManage…

html表格在页面间距,在CSS中设置单元格和单元格间距?

梦里花落0921基本要控制css中的“单元格填充”&#xff0c;只需使用padding放在桌子上。例如10便士的“细胞填充物”&#xff1a;td { padding: 10px;}对于“单元格间距”&#xff0c;可以应用border-spacing属性设置到表中。例如&#xff0c;10 px的“单元间距”&#xff1a;t…

DAS,NAS,SAN在数据库存储上的应用

一. 硬盘接口类型1. 并行接口还是串行接口(1) 并行接口&#xff0c;指的是并行传输的接口&#xff0c;比如有0~9十个数字&#xff0c;用10条传输线&#xff0c;那么每根线只需要传输一位数字&#xff0c;即可完成。从理论上看&#xff0c;并行传输效率很高&#xff0c;但是由于…

Spring Data Redis—Pub/Sub(附Web项目源码)

一、发布和订阅机制 当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候&#xff0c;我们称这个客户端为发布者(publisher)。 而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE 命令接收信息的时候&#xff0c;我们称这个客户端为订阅者(subscriber)。 为了解耦发布者(publish…

Android之Intent.ACTION_MEDIA_SCANNER_SCAN_FILE:扫描指定文件

1&#xff0e;启动MediaScanner服务&#xff0c;扫描媒体文件&#xff1a; 程序通过发送下面的Intent启动MediaScanner服务扫描指定的文件或目录&#xff1a; Intent.ACTION_MEDIA_SCANNER_SCAN_FILE&#xff1a;扫描指定文件 public void scanFileAsync(Context ctx, String …

libuv 中文编程指南(四)网络

网络 libuv 的网络接口与 BSD 套接字接口存在很大的不同, 某些事情在 libuv 下变得更简单了, 并且所有接口都是都是非阻塞的, 但是原则上还是一致的. 另外 libuv 也提供了一些工具类的函数抽象了一些让人生厌的, 重复而底层的任务,比如使用 BSD 套接字结构来建立套接字, DNS 查…

突破历史,21年C#将首获年度编程语言奖!

2021年渐入尾声&#xff0c;TIOBE今日发布了12月排行榜&#xff0c;Java(第3)持续下滑&#xff0c;PHP(第12)跌出前十&#xff0c;而C#(第5)继续稳步增长。据悉&#xff0c;TIOBE的CEO Paul Jansen表示&#xff0c;C#极有可能获取“TIOBE 年度编程语言奖”。该奖项一般颁发给被…

史上最接近上帝的方程!神秘的数字4.669,目前没有人能解开这个谜语......

全世界只有3.14 % 的人关注了爆炸吧知识上帝指纹统治世界&#xff1f;春节进入倒计时&#xff0c;实不相瞒&#xff0c;超模君想鸽的心蠢蠢欲动&#xff0c;费了好大劲才摁住&#xff01;为了不鸽&#xff0c;连夜翻了个墙&#xff0c;明明刚开始还在认认真真看论文&#xff0c…

html仿苹果浏览器,完美仿iPhone风格主题 领航浏览器体验

1仿iPhone的图标式导航页手机浏览器这个市场因其使用情况极为广泛和频繁因此吸引了无数厂商进入&#xff0c;不仅是传统的浏览器厂商也有许多新晋的手机软件厂商&#xff0c;其产品也从强调省流量、云概念、操作体验和自主核心、HTML 5等功能不一而足&#xff0c;今天带来的体验…

Android之MediaProjectionManager实现手机截屏总结

比较好的文章&#xff1a; Android中使用代码截图的各种方法总结 http://blog.csdn.net/woshinia/article/details/11520403 手机截屏&#xff1a; http://www.cnblogs.com/tgyf/p/4655507.html 转载的地方&#xff1a; http://www.cnblogs.com/tgyf/p/4851092.html 分享一…

网络游戏同步法则

转自&#xff1a;http://www.cppblog.com/keigoliye/archive/2009/09/12/95986.html网络游戏同步法则网路的硬件也有限&#xff0c;而人的创造也无限&#xff0c;在公网平均130ms的Latency下&#xff0c;是不存在“完全的”的同步情况。如何通过消除/隐藏延时&#xff0c;将用户…

【JavaScript】关于eval( )

为什么80%的码农都做不了架构师&#xff1f;>>> 一、eval() 动态执行时使用当前函数的闭包。 var i 100; function myFunc(ctx) {var i test;eval(var test "hello."); //test执行后为局部变量 } myFunc(); // 输出值100 alert(i); 二、eva l() 访问…

在ASP.Net Core和JAVA中,使用Azure配置密钥——Key Vault

思路浅析 在软件开发中&#xff0c;项目安全是重中之重&#xff0c;特别是在多部门或者开源项目中&#xff0c;如何保存我们的密钥&#xff0c;但又不影响本地的开发&#xff0c;更需要我们开发者需要考虑的问题&#xff0c;这里简单的列举了下平时开发中我们做的…

我怀疑对象做了什么对不起我的事......

1 狗狗已经这么明显提醒你了▼2 传销老总都怕的传销......▼3 和一只狗撞衫了▼4 你信吗&#xff1f;我跳水不会湿头发&#xff01;▼5 东北雪糕行业繁荣的原因还挺在理▼6 打了个平手&#xff1f;▼7 缅甸网红苏娜英腰围35公分她还想减▼8 哈哈哈哈▼你点的每个赞&…

jQuery 事件和动画

jQuery 事件和动画 上回说到jQuery的选择器&#xff0c;大家都应该知道了&#xff0c;jQuery的使用可以让我们少写很多的代码&#xff0c;达到一个轻量级的效果&#xff0c;那么既然都有选择器等等方便&#xff0c;那么事件的使用肯定也是不可能缺少的&#xff0c;另外还加入一…

Android之用SingleTask和TaskAffinity解决手机截取的项目启动页面问题

今天做的远程截屏功能,服务端发一个命令下来,然后客户端截屏,截屏的代码已经写好,因为是跨进程通信的,我最后采取的办法是启动activity来实现的,但是问题来了,如果用户没有登录的情况下,可以截屏到任何页面,但是登录了之后,不在本应用里面切换的话,会回到应用的页面…

html怎么用excel打开乱码,我的Excel表格打开就乱码了,请问该如何修复?

回答&#xff1a; 第一种方法&#xff1a;采取直接修复最新版本的Excel具有直接修复受损文件的功能&#xff0c;大家可以利用Excel新增的“打开并修复”命令&#xff0c;来直接检查并修复Excel文件中的错误&#xff0c;只要单击该命令&#xff0c;Excel就会打开一个修复对话框&…

汽车模型身上出现反射效果

博客列表: www.1111kp.info, www.163123.info, www.360111.info, www.360123.info, www.6699ysk.info, www.aaafaipiao.com, www.bbbkp123.info, www.fp1111.info, www.fp1234.info, www.fpfuzhou.com, 3dsmax导出的模型&#xff0c;默认材质是漫反射&#xff08;diffuse&…

记一次 .NET 某市附属医院 Web程序 偶发性CPU爆高分析

一&#xff1a;背景 1. 讲故事这个月初&#xff0c;一位朋友加微信求助他的程序出现了 CPU 偶发性爆高&#xff0c;希望能有偿解决一下。从描述看&#xff0c;这个问题应该困扰了很久&#xff0c;还是医院的朋友给力&#xff0c;开门就是 100块 红包 &#x1f923;&#x1f923…