zoukankan      html  css  js  c++  java
  • DataTable和List相互转换的类

    DataTable与List相互转换

      .NET后台数据处理,从数据库中的捞出的数据格式一般是List和DataTable的格式.现在将两种格式相互转换的心得记录下来以便以后查找(直接上代码).

    public class ConvertHelper<T> where T : new()
    {
      //将DataTable转换为List
      public static List<T> ConvertToList(DataTable dt)
      {
        // 定义集合
        var ls = new List<T>();
        // 获得此模型的类型
        Type type = typeof(T);
        //定义一个临时变量
        string tempName = "";
        //遍历DT数据行
        foreach (DataRow dr in dt.Rows)
        {
          T t = new T();
          //获得此模型的公共属性
          PropertyInfo[] pros = t.GetType().GetProperties();
          //遍历公共属性
          foreach (PropertyInfo p in pros)
          {             

            ////属性名称传给临时变量
            //tempName = p.Name;
            ////检查DataTable是否包含此列(列名==对象的属性名) 
            //if (dt.Columns.Contains(tempName))
            //{
            // // 判断此属性是否有Setter   
            // if (!p.CanWrite) continue;//该属性不可写,直接跳出 
            // //取出该行该列的值
            // //object value = dr[tempName];  
            // //如果非空,则赋给对象的属性 
            // //if (value != DBNull.Value)
            // //p.SetValue(t, value, null);
            //}

            if (p.CanWrite && dt.Columns.Contains(p.Name) && dr[p.Name] != DBNull.Value)
              p.SetValue(t, dr[p.Name], null);

          }
          ls.Add(t);

       }

        return ls;
    }

    //获取List类型属性
    public static List<PropertyInfo> GetPropertyInfo(List<T> tList)
    {
      T t = new T();
      PropertyInfo[] tpro = t.GetType().GetProperties();
      return tpro.ToList();
    }

    //将list转换为DataTable
    public static DataTable ConvertToDataTable(List<T> list)
    {
      DataTable dt = new DataTable();//初始化DT
      //var arrPro = GetPropertyInfo(list);
      T t = new T();
      var arrPro = t.GetType().GetProperties();
      foreach (PropertyInfo pro in arrPro)
      {
        if (pro.CanWrite)//如果属性可以写入
        dt.Columns.Add(pro.Name, pro.Name.GetType());//DT的添加列
      }
      for (var i = 0; i < list.Count(); i++)
      {
        DataRow newDr = dt.NewRow();
        foreach (PropertyInfo p in arrPro)
        {
          if (p.CanWrite)
          newDr[p.Name] = p.GetValue(list[i]);//新行的列赋值
        }
        dt.Rows.Add(newDr);
      }
      return dt;
     }
    }

  • 相关阅读:
    2018/12/21 HDU-2077 汉诺塔IV(递归)
    2018-12-08 acm日常 HDU
    2018/12/12 acm日常 第二周 第六题
    git 添加远程分支,并可以code review.
    zookeeper数据迁移方法
    gem install nokogiri -v '1.6.6.2' 出错
    gem install json -v '1.8.2' error
    gem install bundle 安装失败
    全能型开源远程终端:MobaXterm
    如何写好 Git Commit 信息
  • 原文地址:https://www.cnblogs.com/huage-1234/p/7244501.html
Copyright © 2011-2022 走看看