• 通过.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;
    }
  • 相关阅读:
    一个例子看懂所有nodejs的官方网络demo
    HDU 4283 You Are the One ★(进出栈的括号匹配性质:区间DP)
    HDU 4283 You Are the One ★(进出栈的括号匹配性质:区间DP)
    HDU 4274 Spy's Work (树形DP)
    HDU 4274 Spy's Work (树形DP)
    HUST 1328 String (字符串前缀子串个数 --- KMP)
    HUST 1328 String (字符串前缀子串个数 --- KMP)
    POJ 3167 Cow Pattern ★(KMP好题)
    POJ 3167 Cow Pattern ★(KMP好题)
    HDU 2594 Simpsons’ Hidden Talents (KMP)
  • 原文地址:https://www.cnblogs.com/lijinchang/p/5425803.html
Copyright © 2020-2023  润新知