public static T ReaderToModel<T>(IDataReader dr)
{
try
{
 using (dr)
{
 if (dr.Read())
{
 Type modelType = typeof(T);
 T model = Activator.CreateInstance<T>();
 for (int i = 0; i < dr.FieldCount; i++)
{
 PropertyInfo pi = modelType.GetProperty(GetPropertyName(dr.GetName(i)));
 pi.SetValue(model, HackType(dr[i], pi.PropertyType), null);
}
 return model;
}
}
 return default(T);
}
 catch (Exception ex)
{
 throw ex;
}
}  public static List<T> ReaderToList<T>(IDataReader dr)
{
 using (dr)
{
 List<T> list = new List<T>();
 Type modelType = typeof(T);
 while (dr.Read())
{
 T model = Activator.CreateInstance<T>();
 for (int i = 0; i < dr.FieldCount; i++)
{
 PropertyInfo pi = modelType.GetProperty(GetPropertyName(dr.GetName(i)));
 pi.SetValue(model, HackType(dr[i], pi.PropertyType), null);
}
list.Add(model);
}
 return list;
}
}
//这个类对可空类型进行判断转换,要不然会报错
 private static object HackType(object value, Type conversionType)
{
 if (conversionType.IsGenericType && conversionType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
 if (value == null)
 return null;  System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(conversionType);
 conversionType = nullableConverter.UnderlyingType;
}
 return Convert.ChangeType(value, conversionType);
}  private static bool IsNullOrDBNull(object obj)
{
 return ((obj is DBNull) || string.IsNullOrEmpty(obj.ToString())) ? true : false;
} //取得DB的列对应bean的属性名
 private static string GetPropertyName(string column)
{
 column = column.ToLower();
 string[] narr = column.Split('_');
 column ="";
 for (int i = 0; i < narr.Length; i++)
{
 if (narr[i].Length > 1)
{
 column += narr[i].Substring(0, 1).ToUpper() + narr[i].Substring(1);
}
else
{
 column += narr[i].Substring(0, 1).ToUpper();
}
}
 return column;
}

通过.net反射技术实现DataReader转换成Model实体类列表的更多相关文章

  1. Datatable转换成List实体对象列表 几个实例

    一, /// <summary> /// 将Datatable转换为List集合 /// </summary> /// <typeparam name="T&q ...

  2. (在线工具)JSON字符串转换成Java实体类(POJO)

    http://www.bejson.com/json2javapojo/ 付代码代码转换示例: public static FixMixedOrderResponse serialization(St ...

  3. 利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model

    利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model   使用场景:网站配置项目,为了便于管理,网站有几个Model类来管理配置文件, 比如ConfigWebsiteMo ...

  4. 利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理

    利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理   2018-3-10 15:18 | 发布:Admin | 分类:代码库 | 评论: ...

  5. C#反射技术的简单操作(读取和设置类的属性)

    public class A { public int Property1 { get; set; } } static void Main(){ A aa = new A(); Type type ...

  6. Gson把json串转换成java实体对象

    Gson把json串转换成java实体对象的方法如下: 1.首先导入Gson的jar包,网上可以下载. java实体对象如下: public class Model { private double ...

  7. 编译器将"+"转换成了StringBuilder类

    MapReduce map100% Reduce 66% 卡死 如果你碰到map100%,reduce 66% 然后程序就貌似停止在这里了,可能是由于在Reduce类里使用了String造成的 根据一 ...

  8. List转DataTable(反射) ; 将泛型集合类转换成DataTable ; 将集合类转换成DataTable

    public class ConvertX { #region 将集合类转换成DataTable /// <summary> /// 将集合类转换成DataTable /// </s ...

  9. CString转换成int CString类相应函数

    CString 型转化成 int 型 把 CString 类型的数据转化成整数类型最简单的方法就是使用标准的字符串到整数转换例程. 虽然通常你怀疑使用_atoi()函数是一个好的选择,它也很少会是一个 ...

随机推荐

  1. C#中Invoke 和 BeginInvoke 的区别

    Control.Invoke 方法 (Delegate) :在拥有此控件的基础窗口句柄的线程上执行指定的委托. Control.BeginInvoke 方法 (Delegate) :在创建控件的基础句 ...

  2. DIOCP之开发流程图之Server

    server开发流程图 暂时没有找到好的流程图绘制软件,就用画图来做的,比较乱,太慢了

  3. Python常用模块学习

    1.模块介绍 2.time & datetime模块 3.random 4.os 5.sys 6.shutil 7.json&pickle 8.shelve 9.xml处理 10.ya ...

  4. [Zigbee]定时器1

    注意:在定时器可以使用一个输入/输出引脚之前,所需的 I/O 引脚必须配置为定时器 1 的外设引脚. 定时器1的引脚映射方案选用是备用2方案:P07对应通道3.P06-通道4.P12-通道0.P11- ...

  5. thon_sklearn机器学习库学习笔记(四)decision_tree(决策树)

    # 决策树 import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.cross_validat ...

  6. git 创建远程分支和删除 master 分支

    . . . . . 最近需要将不同的客户的代码分开管理,所以需要为这些代码分别创建分支. 目前版本库中分支结构如下: [yuhuashi@local:Project]$ git branch -a* ...

  7. laravel(一):如何安装laravel

    1.前提条件 本文针对想从零开始开发 Laravel 程序的初学者,不需要预先具备任何的 Laravel 使用经验.不过,为了能顺利阅读,还是需要事先安装好一些软件: PHP 5.4 及以上版本 包管 ...

  8. [题解]poj 1274 The Perfect Stall(网络流)

    二分匹配传送门[here] 原题传送门[here] 题意大概说一下,就是有N头牛和M个牛棚,每头牛愿意住在一些牛棚,求最大能够满足多少头牛的要求. 很明显就是一道裸裸的二分图最大匹配,但是为了练练网络 ...

  9. c语言选择排序

    简单选择排序是经常用到的一种排序算法. 原理: 1.简单选择排序一句话概括:每次选择无序数列中最小的将其放在有序数列的最后. 2.在简单选择排序中,我们用初始化的数字int a[6]={2,5,6,3 ...

  10. HibernateTemplate的一些常用方法总结

    1:get/load存取单条数据 public Teacher getTeacherById(Long id) { return (Teacher)this.hibernateTemplate.get ...