DataTable转List<dynamic>

最近做的一个项目,MVC+Ado.net。没有ORM很不习惯。找到一个办法,DataTable转List<dynamic>,这样代码就比较好看一点,主要是为了配合
Razor好用点。本来想自己写一个,结果发现网上已经有人写好了。直接拿来用吧。
来源:http://www.oschina.net/code/snippet_1011399_54272

有过滤字段,和反转过滤字段。

    public class DYController : Controller
{ public ActionResult Index()
{
DataTable dt = new DataTable();
dt.Columns.Add("Id");
dt.Columns.Add("Name"); dt.Rows.Add(1, "刘备");
dt.Rows.Add(2, "关羽");
dt.Rows.Add(3, "张飞"); List<dynamic> ListPerson = dt.ToDynamicList();
ViewBag.ListPerson = ListPerson;
return View();
}
} /// <summary>
/// DataTable 扩展
/// </summary>
public static class DataTableExtensions
{
/// <summary>
/// 将DataTable 转换成 List<dynamic>
/// reverse 反转:控制返回结果中是只存在 FilterField 指定的字段,还是排除.
/// [flase 返回FilterField 指定的字段]|[true 返回结果剔除 FilterField 指定的字段]
/// FilterField 字段过滤,FilterField 为空 忽略 reverse 参数;返回DataTable中的全部数
/// </summary>
/// <param name="table">DataTable</param>
/// <param name="reverse">
/// 反转:控制返回结果中是只存在 FilterField 指定的字段,还是排除.
/// [flase 返回FilterField 指定的字段]|[true 返回结果剔除 FilterField 指定的字段]
///</param>
/// <param name="FilterField">字段过滤,FilterField 为空 忽略 reverse 参数;返回DataTable中的全部数据</param>
/// <returns>List<dynamic></returns>
public static List<dynamic> ToDynamicList(this DataTable table, bool reverse = true, params string[] FilterField)
{
var modelList = new List<dynamic>();
foreach (DataRow row in table.Rows)
{
dynamic model = new ExpandoObject();
var dict = (IDictionary<string, object>)model;
foreach (DataColumn column in table.Columns)
{
if (FilterField.Length != 0)
{
if (reverse == true)
{
if (!FilterField.Contains(column.ColumnName))
{
dict[column.ColumnName] = row[column];
}
}
else
{
if (FilterField.Contains(column.ColumnName))
{
dict[column.ColumnName] = row[column];
}
}
}
else
{
dict[column.ColumnName] = row[column];
}
}
modelList.Add(model);
}
return modelList;
}
}

  页面代码如下:

    <table>
<tr>
<th>Id</th>
<th>Name</th>
</tr>
@foreach (dynamic item in ViewBag.ListPerson)
{
<tr>
<th>@item.Id</th>
<th>@item.Name</th>
</tr>
}
</table>

  

DataTable转List<dynamic>仅仅是由于习惯了ORM的写法,实际上点出来也没有代码提示,意义不大。

dynamic做数据传递,实际上比较方便的是用于后端代码接收前端提交过来的JSON,然后转dynamic解析比较直观易懂可直接点出属性,而且不用写太多与之一一对应的Model类。

但是后端向前端传JSON的话,还是用数据字典Dictionary比较好。因为到写前端代码的时候也依然可以点出来:Dic[id] = 1、Dic[Name] = "关羽" => data.Id、 data.Name。

DataTable转List<dynamic>的更多相关文章

  1. DataTable 转换成 Json的3种方法

    在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...

  2. C#中将DataTable导出为HTML的方法

    今天我要向大家分享一种将DataTable导出为到HTML格式的方法.有时我们需要HTML格式的输出数据, 以下代码就可以帮助我们达到目的,. 首先,我们要绑定DataTable和 DataGridV ...

  3. DataTable转换成IList<T>的简单实现

    DataTable的无奈 很多时候,我们需要去操作DataTable.但DataTable的操作,实在是太不方便了.Linq?lambda表达式?统统没有... 特别是对现有结果集做进一步筛选,这样的 ...

  4. 自用的基于Emit的C#下DataTable转实体类方法

    之前一直在做WebForm的开发,数据绑定时直接DataTable绑定Gridview很方便,但是最近开始往MVC转,数据列表的传递和页面展示基本上是以List为主,像下面这样,遍历实体类的各个字段去 ...

  5. jquery dataTable汉化(插件形式)

    1.jquery dataTable.js 官网:http://datatables.net/ 中文:http://dt.thxopen.com/ 2.汉化提示信息(放到xx.js中,引入即可) 注: ...

  6. DataTable与DTO对象的简易转换类

    在web开发过程中,有时候为了数据传输的方便,比如:后台需要更新前端的ViewModel,此时我们定义一个与前端ViewModel结构一样的DTO对象,从数据层获取数据后,将数据封装成DTO然后序列化 ...

  7. asp.net DataTable导出Excel 自定义列名

    1.添加引用NPOI.dll 2.cs文件头部添加 using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.IO; 3.代码如 ...

  8. asp.net dataTable转换成Json格式

    /// <summary> /// dataTable转换成Json格式 /// </summary> /// <param name="dt"> ...

  9. DataTable的orderby有关问题

    在网上找了一个在后台重新对DataTable排序的方法(之所以不在数据库是因为我生成的是报表,写了存储过程用的表变量,order by也要用变量,死活拼不起来,sql能力没过关,动态sql也试了) s ...

  10. 关于c#在DataTable中根据条件删除某一行

    我们经常会将数据源放在DataTable里面,但是有时候也需要移除不想要的行,下面的代码告诉你们 DataTable dts:                DataRow[] foundRow;   ...

随机推荐

  1. Static List

    Static ListStatic List is the smart implementation of list data structure for those languages that h ...

  2. LEETCODE —— Unique Binary Search Trees [动态规划]

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  3. 不同编程语言打印“元旦快乐!"

    javascript: document.write("元旦快乐!"+"<br/>"); PHP: <?php echo "元旦快乐 ...

  4. Eclipse关联源码

    Eclipse关联源码 1.通常查看jdk的源码 1.悬浮在jdk的某class,右击点击Open Declaration 或F3,则调整其源码.如果没有关联源码,则会弹出: 2.点击“Attach ...

  5. nginx(tengine)的一些小优化(持续更新)

    1.nginx日志切割脚本 需求来源:nginx本身并没有日志切割的功能,由访问产生的大日志很难进行分析. 实现目的:每天对nginx日志进行切割,并备份至指定文件夹. 简要指令: mv /usr/l ...

  6. 分享一个绿色版本 sql server 查询器,

    首先感谢原作者 源码来原于网络 此查询器增加了一些功能, 可以高亮显示 导出sql 语句    可以把左边树型拖入脚本编辑器 http://pan.baidu.com/s/1dDjaSbn

  7. Shiro标签

    在使用Shiro标签库前,首先需要在JSP引入shiro标签: <%@ taglib prefix="shiro" uri="http://shiro.apache ...

  8. [zz]Maya C++ API Programming Tips

    Maya C++ API Programming Tips source : http://wanochoi.com/?page_id=1588 How to handle the multiple ...

  9. My tool chain in CentOS 7

    - Git Client SmartGit http://www.linuxlinks.com/article/20120129035558195/GitClients.html candidates ...

  10. jdk动态代理实现

    1.jdk动态代理的简单实现类 package com.proxy; import java.lang.reflect.InvocationHandler; import java.lang.refl ...