zoukankan      html  css  js  c++  java
  • 通过.net反射技术实现DataReader转换成Model实体类列表

     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;
    }
  • 相关阅读:
    sqlsever2008及以上各个安装包的说明
    解决 windows2012 下无法安装 sql2008R2
    dapper extensions (predicates)
    Dapper full example
    Dapper.ColumnMapper 的使用
    wms
    大端格式 与 小端格式
    mysql数据库引擎
    事务
    MySQL索引底层实现
  • 原文地址:https://www.cnblogs.com/lijinchang/p/5425803.html
Copyright © 2011-2022 走看看