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;
    }
  • 相关阅读:
    BZOJ1307: 玩具 单调队列
    BZOJ4415: [Shoi2013]发牌 树状数组+二分
    BZOJ2456: mode
    BZOJ2982: combination Lucas
    BZOJ4195: [Noi2015]程序自动分析 并查集
    BZOJ2563: 阿狸和桃子的游戏 贪心
    BZOJ5281: [Usaco2018 Open]Talent Show 01分数规划+01背包
    一种斐波那契博弈(Fibonacci Nim)
    网易云深度剖析Kubernetes优化与实践
    360°透视:云原生架构演进
  • 原文地址:https://www.cnblogs.com/lijinchang/p/5425803.html
Copyright © 2011-2022 走看看