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

DataTable和List相互转换的类的更多相关文章

  1. C# 将DataTable数据源转换成实体类

    using System; using System.Collections.Generic; using System.Data; using System.Reflection; /// < ...

  2. DataTable转List<Model>通用类

    /// <summary> /// DataTable转List<Model>通用类[实体转换辅助类] /// </summary> public class Mo ...

  3. DataTable转List<Model>通用类【实体转换辅助类】

    /// <summary> /// DataTable转List<Model>通用类[实体转换辅助类] /// </summary> public class Mo ...

  4. DataReader,DataTable利用泛型填充实体类

    using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary ...

  5. C# LINQ系列:LINQ to DataSet的DataTable操作 及 DataTable与Linq相互转换

    LINQ to DataSet需要使用System.Core.dll.System.Data.dll和System.Data.DataSetExtensions.dll,在项目中添加引用System. ...

  6. JSON对象与XML相互转换工具类

    依赖jar <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId ...

  7. DataTable转List,DataTable转为Model对象帮助类

    DataTable转List,DataTable转为Model对象帮助类 public class ModelConvertHelper<T> where T : new() { publ ...

  8. (转)DataTable与结构不同实体类之间的转换

    原文地址:http://www.cnblogs.com/kinger906/p/3428855.html 在实际开发过程中,或者是第三方公司提供的数据表结构,与我们系统中的实体类字段不对应,遇到这样我 ...

  9. DataTable与结构不同实体类之间的转换

    在实际开发过程中,或者是第三方公司提供的数据表结构,与我们系统中的实体类字段不对应,遇到这样我们怎么处理呢?可能有人会说,在转换时创建一个实体对象,对表里的数据逐行遍历来实例化这个实体对象不就完了.的 ...

随机推荐

  1. SLAM: Inverse Depth Parametrization for Monocular SALM

    首语: 此文实现客观的评测了使线性化的反转深度的效果.整篇只在表明反转可以线性化,解决距离增加带来的增长问题,有多少优势--%! 我的天呢!我竟然完整得翻译了一遍. 使用标记点地图构建SLAM的方法, ...

  2. 怎么在阿里云搭建一个WordPress博客(超详细教程)

    想以正确的方式启动一个 WordPress 博客吗?我知道,这可能是一个令人恐惧的想法 -- 其实你并不孤单.但是,在帮助很多用户创建博客之后,我决定编写一份详细的指南,让任何没有技术知识的人都能拥有 ...

  3. 08 Django组件-Forms组件

    Django的Forms组件主要有以下几大功能: 页面初始化,生成HTML标签 校验用户数据(显示错误信息) HTML Form提交保留上次提交数据 一.小试牛刀 1.定义Form类 from dja ...

  4. jsTree checkbox plugin使用笔记

    引入css文件 <link rel="stylesheet" type="text/css" href="js/assets/global/pl ...

  5. eas之获取单据编码规则

    //获取单据编码规则  /*** @Title: getNumber* @Description: TODO(获取单据编码规则)*               <p>* @date 201 ...

  6. Running to the End(Codeforces & AtCoder 百套计划)

    ...Reserved for the future... 仿照xxy dalao的CF&CC百套计划,做了一个Codeforces & AtCoder 百套计划,按这个速度刷下去,每 ...

  7. codeforces 244B-Undoubtedly Lucky Numbers 搜索

    题意:给你一个n,求不大于n的并且仅由两种或者一种数字组成的数的个数.(有点绕,,简单点就是,看看小于等于n点数中,,有多少数字只有一种数字,或者有两种数字组成) “哎,自己还是太菜了,训练的时候只做 ...

  8. nyoj24-素数 距离问题

    素数距离问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素数 ...

  9. case...when...then if 用法

    select case when if 的一些用法 概述:sql语句中的case语句与高级语言中的switch语句,是标准sql的语法,适用于一个条件判断有多种值的情况下分别执行不同的操作. 首先,让 ...

  10. lamp平台搭建论坛网站(Discuz论坛)

    1. 安装Apache 1) 安装apr [root@www lamp]# yum install zlib-devel gcc gcc-c++ openssl-devel pcre-devel -y ...