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. js中原型继承的概念

  2. ibatis map

    <select id="selectBank2" parameterClass="java.util.Map" resultClass="jav ...

  3. 循序渐进Python3(十一) --3--  web之dom

    DOM                  文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的 ...

  4. PHP开启cURL功能

    PHP开启cURL功能 在php.ini中开启 确定php扩展目录下有php_curl.dll类库 在php.int中找到扩展库所在目录 判断目录下是否有php_curl.dll 没有的话去搜索下载 ...

  5. java keytool证书工具使用小结

    java keytool证书工具使用小结 在Security编程中,有几种典型的密码交换信息文件格式: DER-encoded certificate: .cer, .crt    PEM-encod ...

  6. C. Shaass and Lights 组合数学

    http://codeforces.com/contest/294/problem/C 把那个数组n分段了,那么有两类. 1.开头和端点那些,就是只有一端在开始的,这个时候,要开完这些灯,只能循序渐进 ...

  7. IT学习网站集结

    IT的学习网站: 慕课网   http://www.imooc.com 51CTO   http://www.51cto.com/ CSDN    http://www.csdn.net/ 极客   ...

  8. M站开发规范——By Klax

    M站开发的规范,根据具体情况,涉及代码组织的模式,代码编码风格,模块化等,经...研究...决定: 1.采用AMD 规范(RequireJS)实现js模块化. 2.单个文件尽量采用面向对象编程和模块化 ...

  9. 防止多次领取红包进行ID锁

    //controller里面使用锁 ActivityRedPacket ap = customerService.getActivityRedPacket(params);    if (synchr ...

  10. NOT IN查询效率低,用它的等效写法提高效率。

    最近在处理大数据量导入的时候,使用OPENROWSET将Excel导入到临时表中之后,需要对数据进行唯一性验证.这时候发现使用NOT IN严重影响效率,一条sql可能执行10分钟甚至更久.尝试改变写法 ...