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;
 }
}

原文地址:https://www.cnblogs.com/huage-1234/p/7244501.html