public class Table2Entity<T> where T : class,new()
{
public static List<T> GetEntitys(DataTable dt)
{
Dictionary<string, string> columns = new Dictionary<string, string>();
foreach (DataColumn item in dt.Columns)
{
columns.Add(item.ColumnName.Trim().ToLower(), item.ColumnName);
}
List<T> result = new List<T>();
var proptetis = typeof(T).GetProperties(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
foreach (DataRow dr in dt.Rows)
{
T obj = new T();
foreach (var item in proptetis)
{
var attributes = item.GetCustomAttributes(typeof(RenameAttribute), true);
var columnName = (attributes != null && attributes.Length > ) ? ((RenameAttribute)(attributes[])).Name.Trim().ToLower() : item.Name.Trim().ToLower();
if (columns.Keys.Contains(columnName))
{
var mt = item.GetSetMethod(true);
var value = dr[columns[columnName]];
if (value == null || value == DBNull.Value || string.IsNullOrWhiteSpace(value.ToString())) continue;
if (item.PropertyType == typeof(string))
mt.Invoke(obj, new object[] { value.ToString() });
else if (item.PropertyType == typeof(int) || item.PropertyType == typeof(int?))
mt.Invoke(obj, new object[] { Convert.ToInt32(value) });
else if (item.PropertyType == typeof(long) || item.PropertyType == typeof(long?))
mt.Invoke(obj, new object[] { Convert.ToInt64(value) });
else if (item.PropertyType == typeof(double) || item.PropertyType == typeof(double?))
mt.Invoke(obj, new object[] { Convert.ToDouble(value) });
else if (item.PropertyType == typeof(decimal) || item.PropertyType == typeof(decimal?))
mt.Invoke(obj, new object[] { Convert.ToDecimal(value) });
else if (item.PropertyType == typeof(DateTime) || item.PropertyType == typeof(DateTime?))
mt.Invoke(obj, new object[] { Convert.ToDateTime(value) });
else if (item.PropertyType == typeof(float) || item.PropertyType == typeof(float?))
mt.Invoke(obj, new object[] { float.Parse(value.ToString()) });
else if (item.PropertyType == typeof(bool))
mt.Invoke(obj, new object[] { bool.Parse(value.ToString()) });
else if (item.PropertyType.BaseType == typeof(System.Enum))
{
mt.Invoke(obj, new object[] { Convert.ToInt32(value) });
}
}
}
result.Add(obj);
}
return result;
}
}

table 转实体的更多相关文章

  1. C# 泛型实现Table与实体的相互转换

    public class ModelHandler<T> where T : new() { /// <summary> /// Table转换成实体 /// </sum ...

  2. @Entity 和 @Table

    Java Persistence API定义了一种定义,可以将常规的普通Java对象(有时被称作POJO)映射到数据库.这些普通Java对象被称作Entity Bean.除了是用Java Persis ...

  3. JPA之@Entity、@Table、@Column、@Id

    Java Persistence API定义了一种定义,可以将常规的普通Java对象(有时被称作POJO)映射到数据库.这些普通Java对象被称作Entity Bean.除了是用Java Persis ...

  4. JPA实体类中的注解

    @Entity 标注于实体类上,通常和@Table是结合使用的,代表是该类是实体类@Table 标注于实体类上,表示该类映射到数据库中的表,没有指定名称的话就表示与数据库中表名为该类的简单类名的表名相 ...

  5. MyEclipse从数据库反向生成实体类通过Hibernate的方式----mysql数据库实例

    1.我们通过DB与数据库建立连接 2.建立web工程,构建Hibernate框架 3.通过table生成实体类

  6. ToolsCodeTemplate使用

    最近学习使用CodeSmith代码生成器 CodeSmith 是一种语法类似于asp.net的基于模板的代码生成器,程序可以自定义模板,从而减少重复编码的劳动量,提高效率. 作用:CodeSmith ...

  7. 7.DataAnnotations(数据注解)【Code-First 系列】

    EF Code-First提供了一系列的数据注解的特性,你可以将其应用到你的领域类和属性中,数据注解属性重写了EF默认的约定. System.ComponentModel.DataAnnotation ...

  8. spring4+hibernate4+maven环境搭建

    本文主要介绍利用maven搭建spring4+hibernate4开发环境. 首先我们创建一个maven项目,具体步骤就不详细介绍了,看看我们pom.xml文件 <project xmlns=& ...

  9. 详谈Hibernate框架关系映射!

    接触Hibernate也有一小段的时间了,愈发的觉得Hibernate是个神奇的东西,为什么这么说呢?因为你可以不懂一行sql,直接面向对象,就可以将数据直接保存到数据库去!! 你还可以保存一个对象, ...

随机推荐

  1. hash 冲突及解决办法。

    hash 冲突及解决办法. 关键字值不同的元素可能会映象到哈希表的同一地址上就会发生哈希冲突.解决办法: 1)开放定址法:当冲突发生时,使用某种探查(亦称探测)技术在散列表中形成一个探查(测)序列.沿 ...

  2. java通过url抓取网页数据-----正则表达式

    原文地址https://www.cnblogs.com/xiaoMzjm/p/3894805.html [本文介绍] 爬取别人网页上的内容,听上似乎很有趣的样子,只要几步,就可以获取到力所不能及的东西 ...

  3. undefined reference to `__sync_bool_compare_and_swap_4

    然后开始glibc的编译工作. 你必须设定march这个参数才行,要不然会出现“undefined reference to `__sync_bool_compare_and_swap_4′.”这个错 ...

  4. Winter-1-C A + B II 解题报告及测试数据

    Time Limit:1000MS Memory Limit:32768KB Description I have a very simple problem for you. Given two i ...

  5. SiteMesh使用(2.4.2)

    SiteMesh是一个网页布局和修饰的框架.我理解的是在一个母版页上引入页面各个位置的信息,从而拼接成一个页面展示出来.它定义了一个过滤器,把页面统一加上头部和底部. 我的项目是在springmvc中 ...

  6. Linux Swap交换分区介绍

    Swap分区在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中, ...

  7. 20145329 《JAVA程序设计》课后习题代码编写总结

    20145329<Java程序设计>课后习题学习总结 学习内容总结 package cc.openhome; public class Hello2 { public static voi ...

  8. Jquery14 工具函数

    学习要点: 1.字符串操作 2.数组和对象操作 3.测试操作 4.URL 操作 5.浏览器检测 6.其他操作 工具函数是指直接依附于 jQuery 对象,针对 jQuery 对象本身定义的方法,即全局 ...

  9. Redis-数据操作

    数据操作 redis是key-value的数据,所以每个数据都是一个键值对 键的类型是字符串 值的类型分为五种: 字符串string 哈希hash 列表list 集合set 有序集合zset 数据操作 ...

  10. Jenkins 集成Maven打包SpringBoot项目并自动部署到Tomcat服务器

    提前条件: 1.在Jenkins服务器上安装Git.JDK和Maven 2.准备另一台服务器并安装Tomcat 3.Gitlab服务器 4.Gitlab仓库中上传SpringBoot项目代码 第一步, ...