zoukankan      html  css  js  c++  java
  • asp.net 自动遍历实体类

      最近做项目需要读取修改前数据库中被修改的数据所有的信息,一开始想要在model层的每个类都写一个函数return一串字符串,

    但是由于表太多,实体类数量太大,写出来太浪费时间,所以决定写一个通用的方法输出

    /// <summary>
    /// 循环输出实体类的各属性名称和属性值
    /// </summary>
    /// <param name="Entity">实体</param>
    /// <returns></returns>
    public string ResolvingTableRow(object Entity)
    {
      Type EntType = Entity.GetType();
      PropertyInfo[] propertys = EntType.GetProperties();
      string tempName = string.Empty;
      foreach (PropertyInfo pi in propertys)
      {
        tempName = tempName + pi.Name+"";
        string tem = pi.ToString();
        if (pi.GetValue(Entity, null) != null)
        {
          tempName = tempName + pi.GetValue(Entity, null).ToString()+"";
        }
        else
        {
          tempName = tempName + "";
        }
      }
      return tempName;
    }

    既然有通用的遍历实体类属性值的方法,那就一定也有自动生成实体类的方法,两种方法的代码大体上没什么区别

    /// 根据类型填充单个实体类
    /// </summary>
    /// <param name="Souce"></param>
    /// <param name="Entity"></param>
    /// <param name="EntType"></param>
    /// <returns></returns>
    public static object ResolvingTableRow(DataRow Souce, object Entity)
    {
      Type EntType = Entity.GetType();
      object User = Activator.CreateInstance(EntType);
      PropertyInfo[] propertys = EntType.GetProperties();
      string tempName = string.Empty;
      foreach (PropertyInfo pi in propertys)
      {
        tempName = pi.Name;//将属性名称赋值给临时变量
        if (Souce.Table.Columns.Contains(tempName))
        {
          // 判断此属性是否有Setter
          if (!pi.CanWrite) continue;//该属性不可写,直接跳出
          //取值 011
          object value = Souce[tempName];
          if (value != DBNull.Value)
          {
            //value = CheckObjValue(value, pi);
            //如果非空,则赋给对象的属性
            pi.SetValue(User, value, null);
          }
        }
      }
      return User;
    }
  • 相关阅读:
    飞机大战4-我的子弹
    飞机大战3-我的飞机
    飞机大战1-分析设计
    继承
    常见题
    42个例子算法
    心跳
    tomcat
    service
    URI URL
  • 原文地址:https://www.cnblogs.com/xuxw/p/3435969.html
Copyright © 2011-2022 走看看