Table转换成实体、Table转换成实体集合(可转换成对象和值类型)
/// <summary>
        /// Table转换成实体
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="table"></param>
        /// <returns></returns>
        public static T ToEntity<T>(this DataTable table) where T : class, new()
        {
            if (table == null || table.Rows == null || table.Rows.Count <= 0)
            {
                return default(T);
            }
            var entity = (T)Activator.CreateInstance(typeof(T));
            var row = table.Rows[0];
            var properties = typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public);
foreach (var property in properties)
            {
                if (table.Columns.Contains(property.Name))
                {
                    if (!IsNullOrDBNull(row[property.Name]))
                    {
                        property.SetValue(entity, HackType(row[property.Name], property.PropertyType), null);
                    }
                }
            }
            return entity;
        }
/// <summary>
        /// Table转换成实体集合(可转换成对象和值类型)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="table"></param>
        /// <returns></returns>
        public static List<T> ToList<T>(this DataTable table)
        {
            var list = new List<T>();
            var properties = typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public);
            for (var i = 0; i < table.Rows.Count; i++)
            {
                var row = table.Rows[i];
                T entity;
                var tType = typeof(T);
                if (!(tType == typeof(string)) && (tType.IsClass || tType.IsGenericType))
                {
                    entity = (T)Activator.CreateInstance(typeof(T));
                    foreach (var property in properties)
                    {
                        if (table.Columns.Contains(property.Name))
                        {
                            if (!IsNullOrDBNull(row[property.Name]))
                            {
                                property.SetValue(entity, HackType(row[property.Name], property.PropertyType), null);
                            }
                        }
                    }
                }
                else
                {
                    //entity = default(T);
                    entity = ConvertUtils.To(row[0], default(T));
                }
                list.Add(entity);
            }
            return list;
        }
Table转换成实体、Table转换成实体集合(可转换成对象和值类型)的更多相关文章
- 生成二维码  加密解密类  TABLE转换成实体、TABLE转换成实体集合(可转换成对象和值类型)  COOKIE帮助类  数据类型转换  截取字符串  根据IP获取地点  生成随机字符  UNIX时间转换为DATETIME\DATETIME转换为UNIXTIME  是否包含中文    生成秘钥方式之一  计算某一年 某一周 的起始时间和结束时间
		生成二维码 /// <summary>/// 生成二维码/// </summary>public static class QRcodeUtils{private static ... 
- C# MVC 用户登录状态判断   【C#】list 去重(转载)  js 日期格式转换(转载)  C#日期转换(转载)   Nullable<System.DateTime>日期格式转换 (转载)  Asp.Net MVC中Action跳转(转载)
		C# MVC 用户登录状态判断 来源:https://www.cnblogs.com/cherryzhou/p/4978342.html 在Filters文件夹下添加一个类Authenticati ... 
- nodejs将PDF文件转换成txt文本,并利用python处理转换后的文本文件
		目前公司Web服务端的开发是用Nodejs,所以开发功能的话首先使用Nodejs,这也是为什么不直接用python转换的原因. 由于node对文本的处理(提取所需信息)的能力不强,类似于npm上的包: ... 
- c#:无法将 NULL 转换成“System.DateTime”,因为它是一种值类型
		摘自:http://www.blogjava.net/parable-myth/archive/2010/09/30/333454.html 在C# 2.0里面的数据类型中,分为值类型和引用类型,引用 ... 
- 键值集合List转换成datatable
		/// <summary> /// 键值集合List转换成datatable /// </summary> /// <param name="data" ... 
- c#:无法将 NULL 转换成“System.DateTime”,因为它是一种值类型(转)
		摘自:http://www.blogjava.net/parable-myth/archive/2010/09/30/333454.html 在C# 2.0里面的数据类型中,分为值类型和引用类型,引用 ... 
- [转]掌握 ASP.NET 之路:自定义实体类简介 --自定义实体类和DataSet的比较
		转自: http://www.microsoft.com/china/msdn/library/webservices/asp.net/CustEntCls.mspx?mfr=true 发布日期 : ... 
- HTML table表格转换为Markdown table表格[转]
		举个栗子,当我想要把这个页面的第一个表格转换成Markdown Table时,怎么做更快,效率更高? 只需简单三步,请看示例: 第一步:复制包含HTML table标签的代码 复制table代码(HT ... 
- 黑马程序员——JAVA基础之Collections和Arrays,数组集合的转换
		------- android培训.java培训.期待与您交流! ---------- 集合框架的工具类: Collections : 集合框架的工具类.里面定义的都是静态方法. Col ... 
随机推荐
- delphi 分享三个随机字符串
			uses math; function GenID:String; var b, x: byte; begin Result := '{'; Randomize; do begin ) > ,) ... 
- 【转载】Configure the max limit for concurrent TCP connections
			转载地址:http://smallvoid.com/article/winnt-tcpip-max-limit.html To keep the TCP/IP stack from taking al ... 
- 我最常用的7个Web在线工具
			为什么要用Web在线工具呢?有两个原因,第一,它不受限于物理平台,我既可以在自己的电脑上使用,也可以在公司或亲戚朋友的电脑上使用(不管对方的操作系统是什么,只要能上网):第二,可以解放硬盘,减少PC端 ... 
- 调试 .NET Framework 源代码、.DotNetCore源码
			调试 .NET Framework 源代码..DotNetCore源码 如何调试 .NET Framework 源代码 在 Visual Studio 调试器中指定符号 (.pdb) 和源文件 .NE ... 
- WPF自定义Window窗体样式
			资源文件代码: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation ... 
- Xshell 配色方案
			[wsp] text=cOc0c0 cyan(bold)=50ebfc text(bold)=9999e8 magenta=7b5175 green=008000 green(bold)=1cc470 ... 
- springBoot的搭建使用记录
			一: 首次搭建:https://blog.csdn.net/u013187139/article/details/68944972 整合mybatis: https://www.jianshu.com ... 
- 【6】JMicro微服务-服务日志监控
			如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 1. 微服务相关 在前面的1到5节中,总共涉及服务提供者,服务消费者,服务监听服务,发布订阅服务,熔断器服务5种类型的猪 ... 
- StringBuffer、StringBuilder、冒泡与选择排序、二分查找、基本数据类型包装类_DAY13
			1:数组的高级操作(预习) (1)数组:存储同一种数据类型的多个元素的容器. (2)特点:每个元素都有从0开始的编号,方便我们获取.专业名称:索引. (3)数组操作: A:遍历 public stat ... 
- Eclipse的使用与Oblect类的常用方法_DAY11
			一.Java开发工具的使用 A:notepad windows自带的记事本. B:高级记事本 Editplus Notepad++ UE sublime2 C:集成开发工具(IDE) 开发和运行. E ... 
