1.List to DataTable

  1. public static DataTable ToDataTable<TSource>(this IList<TSource> data)
  2. {
  3. DataTable dataTable = new DataTable(typeof(TSource).Name);
  4. PropertyInfo[] props = typeof(TSource).GetProperties(BindingFlags.Public | BindingFlags.Instance);
  5. foreach (PropertyInfo prop in props)
  6. {
  7. dataTable.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ??
  8. prop.PropertyType);
  9. }
  10. foreach (TSource item in data)
  11. {
  12. var values = new object[props.Length];
  13. for (int i = 0; i < props.Length; i++)
  14. {
  15. values[i] = props[i].GetValue(item, null);
  16. }
  17. dataTable.Rows.Add(values);
  18. }
  19. return dataTable;
  20. }

2.DataTable To List

  1. public static List<TSource> ToList<TSource>(this DataTable dataTable) where TSource : new()
  2. {
  3. var dataList = new List<TSource>();
  4. const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic;
  5. var objFieldNames = (from PropertyInfo aProp in typeof(TSource).GetProperties(flags)
  6. select new
  7. {
  8. Name = aProp.Name,
  9. Type = Nullable.GetUnderlyingType(aProp.PropertyType) ??
  10. aProp.PropertyType
  11. }).ToList();
  12. var dataTblFieldNames = (from DataColumn aHeader in dataTable.Columns
  13. select new
  14. {
  15. Name = aHeader.ColumnName,
  16. Type = aHeader.DataType
  17. }).ToList();
  18. var commonFields = objFieldNames.Intersect(dataTblFieldNames).ToList();
  19. foreach (DataRow dataRow in dataTable.AsEnumerable().ToList())
  20. {
  21. var aTSource = new TSource();
  22. foreach (var aField in commonFields)
  23. {
  24. PropertyInfo propertyInfos = aTSource.GetType().GetProperty(aField.Name);
  25. var value = (dataRow[aField.Name] == DBNull.Value) ?
  26. null : dataRow[aField.Name]; //if database field is nullable
  27. propertyInfos.SetValue(aTSource, value, null);
  28. }
  29. dataList.Add(aTSource);
  30. }
  31. return dataList;
  32. }

Conversion Between DataTable and List in C#的更多相关文章

  1. csharp:Conversion Between DataTable and List

    /// <summary> /// http://www.codeproject.com/Tips/784090/Conversion-Between-DataTable-and-List ...

  2. Dapper 的输出参数使用示范

    -- 普通SQL 示范-- Queries with output parameters. Hide Shrink Copy Code // output parameters // the para ...

  3. DataTable转化成实体对象

    /// <summary> /// The data extension. /// </summary> public static class DataExtension { ...

  4. 媲美pandas的数据分析工具包Datatable

    1 前言 data.table 是 R 中一个非常通用和高性能的包,使用简单.方便而且速度快,在 R 语言社区非常受欢迎,每个月的下载量超过 40 万,有近 650 个 CRAN 和 Biocondu ...

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

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

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

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

  7. Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define ...

    Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define ... 这个错误是因为有两个相 ...

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

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

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

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

随机推荐

  1. 从零开始学习MySQL1---MySQL基础

    数据库基础 数据库是一个长期存储在计算机内的.有组织的.有共享的.统一管理的.数据集合.它是一个按数据结构来存储和管理数据的计算机软件系统.数据库包含两层含义:保管数据的仓库,以及数据管理的方法和技术 ...

  2. jquery判断邮箱格式问题

    方法一: var search_str = /^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/; var email_val = $("#Email").val(); ...

  3. 修炼debug

    常用方法: alert console.log 行号手工打breakpoints 手工加入debugger:配合条件if(){debugger;} break on dom modify eventL ...

  4. druid配置(转)

    java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,有不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色的性能,也 ...

  5. 利用rowid更新单表

    SQL> create table test1(id int,name char(10)); Table created. begin for i in 1 .. 1000000 loop in ...

  6. 算法-KMP模式匹配算法

    1朴素算法:逐个比较 2 主要是解决多余比较的麻烦,通过处理比较字符串是否含有重复的字符的问题.

  7. 深入浅出Node.js (11) - 产品化

    11.1 项目工程化 11.1.1 目录结构 11.1.2 构建工具 11.1.3 编码规范 11.1.4 代码审查 11.2 部署流程 11.2.1 部署环境 11.2.2 部署操作 11.3 性能 ...

  8. 0ull 是什么意思?

    unsigned long long 类型的0 同理:#define     DEV_IIC1             ( (u64)1 <<  7ULL)    这个作用是64位中的第7 ...

  9. 使用EF连接现有数据库

    新建个项目---在项目内添加新建项-- 选择ADo.NET实体数据模型(我的软件vs2012 上面之所以有两个ADo.NET实体数据模型 是因为上面一个EF4.0 下面一个EF5.0 ) 在实际操作中 ...

  10. 当前jQuery Mobile支持的6种页面切换方式

    切换方式 data-transition属性值 横向幻灯方式 slide 自上向下幻灯方式 slideup 自下向上幻灯方式 slidedown 中央弹出 pop 淡入淡出 fade 旋转弹出 fli ...