闲来无事,只有写代码啦,以下为DataTable转List与List转DataTable的两个方法,主要技术点用到了反射原理:

    /// <summary>
/// 模型转换类
/// </summary>
public class ConvertModel
{
/// <summary>
/// DataTable转List
/// </summary>
/// <typeparam name="T">list中的类型</typeparam>
/// <param name="dt">要转换的DataTable</param>
/// <returns></returns>
public static List<T> DatatTableToList<T>(DataTable dt) where T : class, new()
{
List<T> list = new List<T>();
T t = new T();
PropertyInfo[] prop = t.GetType().GetProperties();
//遍历所有DataTable的行
foreach (DataRow dr in dt.Rows)
{
t = new T();
//通过反射获取T类型的所有成员
foreach (PropertyInfo pi in prop)
{
//DataTable列名=属性名
if (dt.Columns.Contains(pi.Name))
{
//属性值不为空
if (dr[pi.Name] != DBNull.Value)
{
object value = Convert.ChangeType(dr[pi.Name], pi.PropertyType);
//给T类型字段赋值
pi.SetValue(t, value, null);
}
}
}
//将T类型添加到集合list
list.Add(t);
}
return list; } /// <summary>
/// List转换为DataTable
/// </summary>
/// <typeparam name="T">List中的类型</typeparam>
/// <param name="list">要转换的list</param>
/// <returns></returns>
public static DataTable ListToDataTable<T>(List<T> list) where T : class
{
DataTable dt = new DataTable();
PropertyInfo[] prop = typeof(T).GetProperties();
DataColumn[] ColumnArr = prop.Select(p => new DataColumn(p.Name, p.PropertyType)).ToArray();
dt.Columns.AddRange(ColumnArr);
foreach (T t in list)
{
DataRow dr = dt.NewRow();
foreach (PropertyInfo pi in prop)
{
if (dt.Columns.Contains(pi.Name))
{
if (pi.GetValue(t) != null)
{
dr[pi.Name] = pi.GetValue(t);
}
}
}
dt.Rows.Add(dr);
} return dt;
}
}

调用:

            DataTable dt = new DataTable();
dt.Columns.Add("Id");
dt.Columns.Add("Sex");
dt.Columns.Add("Age");
dt.Columns.Add("Height");
DataRow dr = dt.NewRow();
dr["Id"] = ;
dr["Sex"] = ;
dr["Age"] = ;
dr["Height"] = ;
dt.Rows.Add(dr);
//将DataTable转换为List<Persion>
List<Persion> list1 = ConvertModel.DatatTableToList<Persion>(dt); List<Persion> list = new List<Persion>()
{
new Persion(){Id=,Sex=,Age=,Height=},
new Persion(){Id=,Sex=,Age=,Height=},
};
//将List<Persion>转换为DataTable
DataTable dt1 = ConvertModel.ListToDataTable<Persion>(list);

C#之DataTable转List与List转Datatable的更多相关文章

  1. C# DataTable转List And List转DataTable

    // DataTable转List: IList<HousesEntity> Ilist = TableAndList.ConvertTo<HousesEntity>(dt); ...

  2. “DataTable”是“System.Data.DataTable”和“Microsoft.Office.Interop.Excel.DataTable”之间的不明确的引用

    “DataTable”是“System.Data.DataTable”和“Microsoft.Office.Interop.Excel.DataTable”之间的不明确的引用 造成这个错误的原因是,在 ...

  3. 多个不同的表合并到一个datatable中,repeater在绑定datatable

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...

  4. 将两个列不同的DataTable合并成一个新的DataTable

    /// <summary>         /// 将两个列不同(结构不同)的DataTable合并成一个新的DataTable         /// </summary> ...

  5. C#给DataTable添加序号、C#给DataTable添加合计、小计

    /// <summary>        /// 给DataTable添加序号        /// </summary>        /// <param name= ...

  6. Datatable的查找和排序(Datatable.Select)

    Datatable  是一种常用的数据结构.数据类型有点类似于数据库中的表结构.在没有使用优秀的orm框架前,大部分的数据库的数据都是先变为Datatable 然后再通过代码转换变成 object. ...

  7. EasyUI - Datatable转Json and Json转Datatable

    using System; using System.Data; using System.Linq; using System.Collections; using System.Collectio ...

  8. C# 将DataTable一行放入另一个DataTable中

    http://blog.csdn.net/huyu107/article/details/53509171 概述 从一个DataTable中取一行放到另一个DataTable里报错: 该行已经属于另一 ...

  9. NPOI json转Excel DataTable转Excel ,Excel转DataTable

    JsonToExcel: public static void JsonToExcel(List<Dictionary<string, object>> json, strin ...

随机推荐

  1. 学习笔记-nodejs报错

    端口被占用 解决办法:打开控制管理器关掉node.exe进程 如果找不到可以使用命令行:netstat -ano | findstr 8000 找到进程的pid,然后到控制管理器找到进程杀掉. net ...

  2. CDOJ 1330 柱爷与远古法阵【高斯消元,卡精度】

    柱爷与远古法阵 Time Limit: 125/125MS (Java/Others)     Memory Limit: 240000/240000KB (Java/Others) Submit S ...

  3. [ZOJ3213] Beautiful Meadow

    插头DP...网格图,有障碍,格子上有权值,求总权值最大的简单路径. 因为路径的起始点不确定..所以多开一维表示当前已经有多少个独立插头.. 只要不合并相同的联通块,并且已经用了2个独立插头,那就是一 ...

  4. Kruskal求最小生成树

    #include<bits/stdc++.h> using namespace std; ; ; const int inf = 0x3f3f3f3f; ; typedef long lo ...

  5. java的finalize()方法与C++的析构函数

    ---<java编程思想> 读书笔记 --- 2017/3/15 读<java编程思想>读到初始化与清理一章,文中提及java的finalize()方法,联想到了C++的析构函 ...

  6. java web开发中遇到的问题及解决方案(个人学习日志,持续更新)

    转:http://blog.csdn.net/ducexu/article/details/7529613 2012.05.02   星期三 1.问题:导入的新工程,名字上出现感叹号. 原因:工程的j ...

  7. jquery实现上下滑动选择

    $('.rightShow').on('mousewheel', function(ev) { var dir = ev.originalEvent.wheelDelta if(dir == 120) ...

  8. javascript数据类型之Array类型

    Array类型 除了Object之外,Array类型恐怕是ECMAScript中最常用的类型了.而且,ECMAScript中的数组与其他多数语言中的数组有着相当大的区别.虽然ECMAScript数组与 ...

  9. UserView--第一种方式set去重,基于Spark算子的java代码实现

    UserView--第一种方式set去重,基于Spark算子的java代码实现 测试数据 java代码 package com.hzf.spark.study; import java.util.Ha ...

  10. 【自制工具类】Java删除字符串中的元素

    这几天做项目需要把多个item的id存储到一个字符串中,保存进数据库.保存倒是简单,只需要判断之前是否为空,如果空就直接添加,非空则拼接个"," 所以这个字符串的数据结构是这样的 ...