zoukankan      html  css  js  c++  java
  • DbDataReaderExtensions DbDataRender转换为实体

    using System;
    using System.Collections.Generic;
    using System.Data.Common;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace GZ.CodeGenerate.DBCore
    {
        public static class DbDataReaderExtensions
        {
            public static T GetFieldValue<T>(this DbDataReader render, string fieldname)
            {
                return render.GetFieldValue<T>(render.GetOrdinal(fieldname));
            }
    
            public static T ToObject<T>(this DbDataReader render) where T : new()
            {
                var flags = System.Reflection.BindingFlags.Public
                    | System.Reflection.BindingFlags.Instance
                    | System.Reflection.BindingFlags.IgnoreCase;
    
                Type t = typeof(T);
                T data = new T();
                for (int i = 0; i < render.FieldCount; i++)
                {
                    string name = render.GetName(i);
                    var p = t.GetProperty(name, flags);
                    if (p != null)
                        p.SetValue(data, CheckType(render[i], p.PropertyType), null);
                }
    
                return data;
    
            }
    
            // <summary>
            /// 对可空类型进行判断转换(*要不然会报错)
            /// </summary>
            /// <param name="value">DataReader字段的值</param>
            /// <param name="conversionType">该字段的类型</param>
            /// <returns></returns>
            private static object CheckType(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);
            }
        }
    }
  • 相关阅读:
    098实战 Job的调度
    maven在windows下的安装
    Map的知识点梳理(不包含collections工具类)
    001 LRU-缓存淘汰算法
    Android渲染机制和丢帧分析
    Android性能优化典范
    正确使用Android性能分析工具——TraceView
    android View 绘制完成监听
    那些年我们用过的显示性能指标
    view, surfaceView, invalidate, postInvalidate, 刷新屏幕
  • 原文地址:https://www.cnblogs.com/GarsonZhang/p/13826083.html
Copyright © 2011-2022 走看看