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. DeepLearning学习(1)--多层感知机

    想直接学习卷积神经网络,结果发现因为神经网络的基础较弱,学习起来比较困难,所以准备一步步学.并记录下来,其中会有很多摘抄. (一)什么是多层感知器和反向传播 1,单个神经元 神经网络的基本单元就是神经 ...

  2. 2013xlsm格式文件处理

    2013xlsm格式文件处理 2013格式的xlsm文件在低版本打开为空白的处理 1.关闭2013的宏2.打开文件,另存(去打开密码)3.2007打开另存(格式已变为2007)4.仅破解VBA密码5. ...

  3. SHOPNC占用CPU过高

    今天一个SHOPNC商城突然变慢,查看服务器情况,发现MYSQL占用181%CPU,然后查看PHP慢查询,发现这样的内容 [22-Nov-2016 20:55:41] [pool www] pid 5 ...

  4. C# DateTime转Json汇总

    DateTime转换成json的时候容易出现不想要的格式,在网上搜索了相关的解决方法copy如下: 参考http://www.newtonsoft.com/json/help/html/DatesIn ...

  5. The processing instruction target matching ''[xX][mM][lL]" is not allowed

    报错的来源是: <?xml version="1.0" encoding="UTF8"?> 解决方案::,一般是WSDL的头文件的格式出了问题,比如 ...

  6. selenium第一课(selenium+java+testNG+maven)

    selenium介绍和环境搭建 一.简单介绍 1.selenium:Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包 ...

  7. asp.net 将word文档进行编辑并导出一个新的word

    最近做项目,需要多word文档进行编辑并导出一个新的word,在最初的word编辑中留下特定的字符串用来替换,然后在本地生成一个新的word文档,并且不修改服务器中的word文档,这样才能保证服务器中 ...

  8. MySQL基础(三)

    数据插入 INSERT是用来插入行到数据库表的 ## 给出插入数据的字段名称,使得数据插入不依赖表中列名称的定义顺序 INSERT INTO customers(cust_name,cust_addr ...

  9. C++中虚继承派生类构造函数的正确写法

    最近工作中某个软件功能出现了退化,追查下来发现是一个类的成员变量没有被正确的初始化.这个问题与C++存在虚继承的情况下派生类构造函数的写法有关.在此说明一下错误发生的原因,希望对更多的人有帮助. 我们 ...

  10. ext.ajax.request请求时带有遮罩效果

    ajax请求时有时需要操作大量的数据,反应有时会很慢,这时我们想要来一个遮罩效果,具体步骤如下 1.定义一个遮罩 var myMask = new Ext.LoadMask(Ext.getBody() ...