• C#中批量修改 利用反射原理


    学习MVC时遇到批量修改  于是看到资料关于如下:

    UI代码:

    P05MODEL.User uModify = new P05MODEL.User() { uName = "AAA", uAddtime = DateTime.Now };//需要修改model中的两个字段  uNname和uAddtime
                    bll.ModifyBy(uModify, u => u.uIsDel == true,"uName","uAddtime");   //调用批量修改

    讲解:调用修改类变量讲解:

    /// <param name="model">要修改的实体对象</param>
    /// <param name="proNames">要修改的 属性 名称</param>
    
    ModifyBy(P05MODEL.User model, Expression<Func<P05MODEL.User,bool>> whereLambda,params string[] modifiedProNames)

                          对应修改的model                     用于查询那些数据修改                                                     修改那些字段

    DAL代码:

    public int ModifyBy(P05MODEL.User model, Expression<Func<P05MODEL.User,bool>> whereLambda,params string[] modifiedProNames)
            {
                //4.1查询要修改的数据
                List<P05MODEL.User> listModifing = db.Users.Where(whereLambda).ToList();
    
                //获取 实体类 类型对象
                Type t = typeof(P05MODEL.User); // model.GetType();
                //获取 实体类 所有的 公有属性
                List<PropertyInfo> proInfos = t.GetProperties(BindingFlags.Instance | BindingFlags.Public).ToList();
                //创建 实体属性 字典集合
                Dictionary<string, PropertyInfo> dictPros = new Dictionary<string, PropertyInfo>();
                //将 实体属性 中要修改的属性名 添加到 字典集合中 键:属性名  值:属性对象
                proInfos.ForEach(p => {
                    if (modifiedProNames.Contains(p.Name))
                    {
                        dictPros.Add(p.Name, p);
                    }
                });
    
                //4.3循环 要修改的属性名
                foreach (string proName in modifiedProNames)
                {
                    //判断 要修改的属性名是否在 实体类的属性集合中存在
                    if (dictPros.ContainsKey(proName))
                    {
                        //如果存在,则取出要修改的 属性对象
                        PropertyInfo proInfo = dictPros[proName];
                        //取出 要修改的值
                        object newValue = proInfo.GetValue(model, null); //object newValue = model.uName;
    
                        //4.4批量设置 要修改 对象的 属性
                        foreach (P05MODEL.User usrO in listModifing)
                        {
                            //为 要修改的对象 的 要修改的属性 设置新的值
                            proInfo.SetValue(usrO, newValue, null); //usrO.uName = newValue;
                        }
                    }
                }
                //4.4一次性 生成sql语句到数据库执行
                return db.SaveChanges();
            }

    步骤如下:

      1。通过whereLambda刷选到需要修改的数据存放到listModifing中

      2。因为通过model并不知道那些字段数据需要进行了修改 所以通过model 获取 实体类 类型对象 再通过 获取 实体类 所有的 公有属性

        最后放入字典中:将 实体属性 中要修改的属性名 添加到 字典集合中 键:属性名  值:属性对象

      3。通过遍历反射形式把需要修改的对象中的字段一 一修改

     

  • 相关阅读:
    异常处理 UDP通信
    网络编程 socket套接字 半连接池 通信循环 粘包问题 struct模块 Mac报错
    网络编程 osi七层协议 Time模块补充知识 TCP协议 三次握手 四次挥手
    面向对象 组合 继承
    流式布局
    小程序的瀑布流式布局
    微信小程序的短信接口
    如何高效的编程!
    爱心动画
    em、rpx和px的换算
  • 原文地址:https://www.cnblogs.com/xiaoyangshu/p/12284828.html
Copyright © 2020-2023  润新知