前一篇有学习过《把List<T>转换为DataTablehttp://www.cnblogs.com/insus/p/8043173.html

那此篇,将是学习反向,把DataTable转换为List<T>。这个方法使用的较多。很多情况之后,从数据读出来的数据是DataSet或是DataTable。需要把它们转换为List<T>之后,再转换为json。

下面Insus.NET写一个扩展方法:

 public static List<T> ToList<T>(this DataTable dt)
{
var dataColumn = dt.Columns.Cast<DataColumn>().Select(c => c.ColumnName).ToList(); var properties = typeof(T).GetProperties();
string columnName = string.Empty; return dt.AsEnumerable().Select(row =>
{
var t = Activator.CreateInstance<T>();
foreach (var p in properties)
{
columnName = p.Name;
if (dataColumn.Contains(columnName))
{
if (!p.CanWrite)
continue; object value = row[columnName];
Type type = p.PropertyType; if (value != DBNull.Value)
{
p.SetValue(t, Convert.ChangeType(value, type), null);
}
}
}
return t;
}).ToList();
}

Source Code

接下来,手动创建一个DataTable,添加一些数据行。对象是引用前一篇的对象:

 class Ba
{
public void ConvertDataTableToListToTestDemo()
{
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Account", typeof(string));
dt.Columns.Add("Email", typeof(string)); dt.Rows.Add(, "A0001", "A0001@email.com");
dt.Rows.Add(, "A0002", "A0002@email.com");
dt.Rows.Add(, "A0003", "A0003@email.com"); List<Ay> ays = dt.ToList<Ay>(); ays.ForEach(delegate (Ay ay)
{
Console.WriteLine(ay.ToString());
}); Console.WriteLine("\n\r");
}
}

Source Code

上图红框即是#23行代码,就是本篇的核心代码,把DataTable转换为List<T>。

在控制台测试一下代码:

把DataTable转换为List<T>的更多相关文章

  1. 再谈使用Emit把Datatable转换为对象集合(List<T>)

    一.前因和存在的问题 前面我写了一篇<使用Emit把Datatable转换为对象集合(List<T>)>的博文,其实起源于我自己编写的一个orm工具(见前面几篇博文有介绍),里 ...

  2. 使用Emit把Datatable转换为对象集合(List<T>)

    Emit生成动态方法部分摘自网上,但是经过修改,加入了对委托的缓存以及类结构的调整,使之调用更简洁方便.大致的思路是:要实现转换datatable到某个指定对象的集合,本质是实现转换一个datarow ...

  3. 对象列表转换为DataTable或DataTable转换为对象列表.

    /**********************************************************************************/ // 说明: 数据转换工具. ...

  4. 使用扩展方法将DataTable转换为List<T>

    在将DataTable转换为List<T>时,找到了网上的方案,原文链接:http://stackoverflow.com/questions/4593663/fetch-datarow- ...

  5. 把DataTable转换为泛型List<T>或是JSON

    在开发ASP.NET Web API或ASP.NET MVC时,我们从数据库得到的数据往往是DataSet或是DataTable.为了能让前端JQuery能方便使用至这些数据,我们需要把这些数据转换为 ...

  6. DataTable转换为List<T>或者DataRow转换为T

    这段时间开发ASP.NETMVC应用程序,从数据库获取数据之后,需要把记录转换为数据集在视图中显示.我们需要把DataTable转换为List<T>或者DataRow转换为T. 本篇中可以 ...

  7. C#中把Datatable转换为Json的5个代码实例

    一. /// <summary> /// Datatable转换为Json /// </summary> /// <param name="table" ...

  8. 三层架构中bll层把datatable转换为实体model的理解

    看了很多人的项目,很多都是用到三层架构,其中BLL层中有一种将DataTable转换为实体的方法.一直没有明白为啥要这样做,今天特意去搜索了一下,如果没有答案我是准备提问,寻求解答了.还好找到一个相关 ...

  9. DataTable转换为List<Model>的通用类

    在开发中,把查询结果以DataTable返回很方便,但是在检索数据时又很麻烦,没有模型类型检索方便. 所以很多人都是按照以下方式做的: // 获得查询结果DataTable dt = DbHelper ...

  10. DataTable转换为Model实体对象

    记得在学校的时候,接触得最多的就是SqlHelper,每次在读取的时候不管是DataTable还是DataReader转换为实体对象的时候是最恼火的,因为要写很多代码,而且没有什么意义.后面接触到了反 ...

随机推荐

  1. Kotlin入门(9)函数的基本用法

    上一篇文章介绍了Kotlin新增的空安全机制,控制语句部分可算是讲完了,接下来将连续描述Kotlin如何定义和调用函数,本篇文章先介绍函数的基本用法. 前面几篇文章介绍控制语句之时,在setOnCli ...

  2. VirtualBox下安装CentOS7系统

    本文假定你已经知道如何安装VirtualBox虚拟机软件,并且已经安装好了. 首先我们需要准备好centos的iso镜像文件,可以从centos的官网下载. 以下操作使用的VirtualBox版本号是 ...

  3. weblogic系列漏洞整理 -- 2. weblogic弱口令

    目录 二. weblogic弱口令 0. 思路 1. python爆破脚本 2. 技巧 一.weblogic安装 http://www.cnblogs.com/0x4D75/p/8916428.htm ...

  4. [20171211][转载]如何实现dbms_output输出没有打开serveroutput on.txt

    [20171211]如何实现dbms_output输出没有打开serveroutput on.txt http://orasql.org/2017/12/10/sqlplus-tips-8-dbms_ ...

  5. 【第六篇】SAP ABAP7.5x新语法之SQL注入

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:SAP ABAP7.5x系列之SQL注入   前 ...

  6. 让bootstrap-table支持高度百分比

    更改BootstrapTable.prototype.resetView 方法,以支持高度百分比定义,适应不同高度屏幕 BootstrapTable.prototype.resetView = fun ...

  7. CSS图片水平垂直居中

    Html: <div id="></img></div> </div> CSS: #MainContent { display:table-c ...

  8. 第四章 Hyper-V 2012 R2 网络配置

      尼玛的我不高兴写了,所以下面的文档我直接把原来的pdf给转换出来,加了点自己的注解,我写的话会写自己觉得终于的章节. 在搭建虚拟化平台时,网络的虚拟化是一个非常重要的环节,如何保障网络的持续可用并 ...

  9. JQuery中$.cookie()方法的使用[转]

    jquery.cookie.js插件: <script type="text/javascript" src="js/jquery-1.6.2.min.js&quo ...

  10. django生命周期和事件委派

    这是事件委派如果不用事件委派   直接绑定的话,新添加的按钮不会有删除或者编辑的功能 上面是事件委派的代码 新添加的编辑按钮可以弹出123 django生命周期: 这是Django的生命周期 首先会通 ...