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. Git版本控制与工作流

    基本概念 Git是什么? Git是分布式版本控制系统,与SVN类似的集中化版本控制系统相比,集中化版本控制系统虽然能够令多个团队成员一起协作开发,但有时如果中央服务器宕机的话,谁也无法在宕机期间提交更 ...

  2. npm isArray源码

    module exports的是一个函数. !! val是为了将val转化成布尔值. var isArray = Array.isArray; /** * toString */ var str = ...

  3. C#连接Sql Serve数据库及增,删,改操作

    一:连接. string sqlconn = "server=主机名;database=数据名;integrated security=true" //integrated sec ...

  4. MongoDB数据导入导出成csv或者json

    1. 从远程数据表拉取数据到本地json文件 mongoexport --host 远程服务器IP --port 远程服务器端口 --username 远程数据库用户名 --password 远程数据 ...

  5. 1 Two Sum

    // Java public int[] twoSum(int[] nums, int target) { int[] answer = new int[2]; for (int i = 0; i & ...

  6. 神经网络(python源代码)

    神经网络的逻辑应该都是熟知的了,在这里想说明一下交叉验证 交叉验证方法: 看图大概就能理解了,大致就是先将数据集分成K份,对这K份中每一份都取不一样的比例数据进行训练和测试.得出K个误差,将这K个误差 ...

  7. 【转】Oracle Database PSU/CPU

    转自: http://www.cnblogs.com/ebs-blog/archive/2011/07/28/2167232.html 1. 什么是PSU/CPU?CPU: Critical Patc ...

  8. JAVA学习笔记(二):eclipse智能提示(转)

    存盘 Ctrl+s(肯定知道)注释代码 Ctrl+/取消注释 Ctrl+\(Eclipse3已经都合并到Ctrl+/了)代码辅助 Alt+/快速修复 Ctrl+1代码格式化 Ctrl+Shift+f整 ...

  9. 现在还需要测试或者QA人员吗?

    Facebook没有专门的测试人员,都是开发自己测:微软裁掉了测试部门,改由开发测:google有少量的测试人员,主要做测试自动化框架开发或者性能.安全等专项测试,测试用例还是开发人员自己设计自己跑( ...

  10. pip 加速方案

    每当我pip install * 的时候,总是发现速度很慢,通过google,发现还是有方法来解决这种状况的 在~/ 命令下,创建 .pip/pip.conf,我用的是阿里的镜像,速度还是杠杠的 mk ...