开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 24608|回复: 8
收起左侧

[C#作业] 第六十六天

[复制链接]
发表于 2019-12-18 17:17:45 | 显示全部楼层 |阅读模式   广东省揭阳市

今日学习内容

66.1 通过反射实现表与实体 集合的映射
66.2 通过 AutoMapper 自动实体映射
66.3 ADO.NET 事务处理

今日学习内容

1.自己动手扩展 DateTable 的映射部分

发表于 2021-1-17 18:15:47 | 显示全部楼层   缅甸
Adapter

        static object CheckType(object value, Type pType)
        {

             //判断students 是否定义为Nullable
            if (pType.IsGenericType && pType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
            {
                //如果数据库的值为null,返回null setValue 不会报错
                if (value == null || value is DBNull) return null;
                //不为null 则通过NullableConverter 把pType转化
                NullableConverter nc = new NullableConverter(pType);
                pType = nc.UnderlyingType;
            }

            //一般情况直接调用convert 转化
            return Convert.ChangeType(value, pType);
        }
        public static T ToModelByAdataReader<T>(this IDataAdapter dataAdapter)
        {

            Type mType = typeof(T);
            DataSet dataSet = new DataSet();

            dataAdapter.Fill(dataSet);

            DataTable dataTable = dataSet.Tables[0];


            DataRowCollection dataRowCollection = dataTable.Rows;

            Console.WriteLine(dataRowCollection);

            T tInstance = Activator.CreateInstance<T>();
            foreach (DataRow item in dataRowCollection)
            {
               
               
                for (int i = 0; i < item.ItemArray.Length; i++)
                {
                    PropertyInfo pinfo = mType.GetProperty(item.Table.Columns[i].ColumnName, BindingFlags.GetProperty | BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public);

                    if (pinfo != null)
                    {
                        pinfo.SetValue(tInstance, CheckType(item[i], pinfo.PropertyType));
                    }

                }

                return tInstance;
            }

            return default(T);





        }
回复 支持 反对

使用道具 举报

结帖率:32% (6/19)

签到天数: 14 天

发表于 2020-2-25 10:04:30 | 显示全部楼层   贵州省黔东南苗族侗族自治州
看看再说了
回复 支持 反对

使用道具 举报

发表于 2020-2-23 11:08:21 | 显示全部楼层   山东省济南市
66666666666666666
回复 支持 反对

使用道具 举报

发表于 2020-2-5 15:02:53 | 显示全部楼层   河南省郑州市
看帖必回是一种美德
回复 支持 反对

使用道具 举报

发表于 2020-1-18 13:52:03 | 显示全部楼层   河南省郑州市


  1.          /// <summary>
  2.         /// DataTable 行转换
  3.         /// </summary>
  4.         /// <typeparam name="T"></typeparam>
  5.         /// <returns></returns>
  6.         public static T AdapterToModel<T>(this DataRow dr)
  7.         {
  8.             Type modelType = typeof(T);
  9.             T model = Activator.CreateInstance<T>();
  10.             foreach (var col in dr.Table.Columns)
  11.             {
  12.                 PropertyInfo p = modelType.GetProperty(col.ToString(), BindingFlags.GetProperty | BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
  13.                 if (p != null && IsNotDBNull(dr[col.ToString()]))
  14.                 {
  15.                     p.SetValue(model, CheckType(dr[col.ToString()], p.PropertyType));
  16.                 }
  17.             }

  18.             return model;
  19.         }
  20.         /// <summary>
  21.         /// DataTable 集合转换...内部调用AdapterToModel
  22.         /// </summary>
  23.         /// <typeparam name="T"></typeparam>
  24.         /// <param name="dt"></param>
  25.         /// <returns></returns>
  26.         public static List<T> AdapterToList<T>(this DataTable dt)
  27.         {
  28.             List<T> list = new List<T>();
  29.             DataRowCollection rows = dt.Rows;
  30.             foreach (DataRow row in rows)
  31.             {
  32.                 list.Add(AdapterToModel<T>(row));
  33.             }
  34.             return list;
  35.         }
复制代码
回复 支持 反对

使用道具 举报

结帖率:100% (9/9)

签到天数: 19 天

发表于 2019-12-18 18:38:32 | 显示全部楼层   重庆市重庆市
Datatable?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表