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;
    }
  • 相关阅读:
    [转]ASP.NET中JSON的序列化和反序列化
    [转]JavaScriptSerializer中日期序列化
    [转]国外英语教学网页
    [转]linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符)
    [转]Business Model Canvas(商业模式画布):创业公司做头脑风暴和可行性测试的一大利器
    [转]sql server transaction
    CentOS7安装配置PostgreSQL9.6
    使用struts的同步令牌避免form的重复提交
    Flink初探-为什么选择Flink
    jdbc三种常见用法
  • 原文地址:https://www.cnblogs.com/lijinchang/p/5425803.html
Copyright © 2011-2022 走看看