1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Linq;
  6. using System.Reflection;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9.  
  10. namespace Common
  11. {
  12. public class ModelHelper
  13. {
  14. public static List<T> TableToEntity<T>(DataTable dt) where T : new()
  15. {
  16. List<T> lists = new List<T>();
  17. if (dt.Rows.Count > )
  18. {
  19. foreach (DataRow row in dt.Rows)
  20. {
  21. lists.Add(SetVal(new T(), row));
  22. }
  23. }
  24. return lists;
  25. }
  26.  
  27. public static T SetVal<T>(T entity, DataRow row) where T : new()
  28. {
  29. Type type = typeof(T);
  30. PropertyInfo[] pi = type.GetProperties();
  31. foreach (PropertyInfo item in pi)
  32. {
  33. if (row[item.Name] != null && row[item.Name] != DBNull.Value)
  34. {
  35. if (item.PropertyType.IsGenericType && item.PropertyType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
  36. {
  37. Type conversionType = item.PropertyType;
  38. NullableConverter nullableConverter = new NullableConverter(conversionType);
  39. conversionType = nullableConverter.UnderlyingType;
  40. item.SetValue(entity, Convert.ChangeType(row[item.Name], conversionType), null);
  41. }
  42. else
  43. {
  44. item.SetValue(entity, Convert.ChangeType(row[item.Name], item.PropertyType), null);
  45. }
  46. }
  47. }
  48. return entity;
  49. }
  50.  
  51. public static DataTable EntityToDataTable<T>(List<T> list) where T : new()
  52. {
  53. if (list == null || list.Count == )
  54. {
  55. return null;
  56. }
  57.  
  58. DataTable dataTable = new DataTable(typeof(T).Name);
  59. foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
  60. {
  61. if (propertyInfo.PropertyType.IsGenericType && propertyInfo.PropertyType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
  62. {
  63. Type conversionType = propertyInfo.PropertyType;
  64. NullableConverter nullableConverter = new NullableConverter(conversionType);
  65. conversionType = nullableConverter.UnderlyingType;
  66. dataTable.Columns.Add(new DataColumn(propertyInfo.Name, conversionType));
  67. }
  68. else
  69. {
  70. dataTable.Columns.Add(new DataColumn(propertyInfo.Name, propertyInfo.PropertyType));
  71. }
  72. }
  73.  
  74. foreach (T model in list)
  75. {
  76. DataRow dataRow = dataTable.NewRow();
  77. foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
  78. {
  79. object value = propertyInfo.GetValue(model, null);
  80. if (value != null)
  81. {
  82. dataRow[propertyInfo.Name] = propertyInfo.GetValue(model, null);
  83. }
  84. else
  85. {
  86. dataRow[propertyInfo.Name] = DBNull.Value;
  87. }
  88. }
  89. dataTable.Rows.Add(dataRow);
  90. }
  91. return dataTable;
  92. }
  93. }
  94. }

(转载)DataTable与List<T>相互转换的更多相关文章

  1. 路由其实也可以很简单-------Asp.net WebAPI学习笔记(一) ASP.NET WebApi技术从入门到实战演练 C#面向服务WebService从入门到精通 DataTable与List<T>相互转换

    路由其实也可以很简单-------Asp.net WebAPI学习笔记(一)   MVC也好,WebAPI也好,据我所知,有部分人是因为复杂的路由,而不想去学的.曾经见过一位程序猿,在他MVC程序中, ...

  2. C# DataTable 和List之间相互转换的方法(转载)

    来源:https://www.cnblogs.com/shiyh/p/7478241.html 一.List<T>/IEnumerable转换到DataTable/DataView 方法一 ...

  3. C# DataTable 和List之间相互转换的方法

    介绍:List/IEnumerable转换到DataTable/DataView,以及DataTable转换到List 正文: 一.List<T>/IEnumerable转换到DataTa ...

  4. 转 C# DataTable 和List之间相互转换的方法

    一.List/IEnumerable转换到DataTable/DataView 方法一: /// <summary> /// Convert a List{T} to a DataTabl ...

  5. (转载)DataTable使用技巧总结

    在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结.         一.Da ...

  6. DataTable与List<T>相互转换

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  7. C# datatable to list

    C# DataTable 和List之间相互转换的方法 好库文章 » 软件开发 » .NET » C# 发布者:好饱  发布日期:2013-1-27 22:17:49   更新日期:2013-1-27 ...

  8. Linq 操作基础

    参考资料: LINQ系列:LINQ to DataSet的DataTable操作 List<T>转换为DataTable C# DataTable 和List之间相互转换的方法 Linq中 ...

  9. 【转载】ArcEngine ITable 与System.DataTable相互转换

    /// <summary> /// 打开dbf表 /// </summary> /// <param name="pathName"></ ...

随机推荐

  1. HTTP Analyzer过滤器使用

    HTTP Analyzer简单易用,真实抓包居家必备啊,上一次分享了Fiddler的过滤条件,这次介绍下这款软件的过滤,首先按照肯定是按照软件类型分类喽: 1.按照软件过滤: 这样只会显示chrome ...

  2. Odoo many2many command

    CREATE = lambda values: (0, False, values) // (0,False, Values) //创建 UPDATE = lambda id, values: (1, ...

  3. js获取时间查并实现倒计时读条

    <script type="text/javascript"> $().ready(function () {// 每增加一个切换,就要增加一行,tab1不变,其他的都 ...

  4. FishiGUI系统架构分析 和层次结构 二

    FishiGUI的类型 FIshiGUI属于为应用程序提供图形界面服务的框架系统.它并不直接与终于用户交互(负责与终于用户交互的是在FishiGUI基础上开发的应用程序).而是接受操作系统传来的硬件消 ...

  5. Sql视图创建语句及修改视图

    create view [dbo].[AllUsers] as select u.UserId, u.Firstname, u.Lastname, u.ts, am.Email, au.UserNam ...

  6. Maven的pom文件内容详细理解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  7. baksmali反编译出现:UNEXPECTED TOP-LEVEL ERROR:....Too many open files

    解包大型apk文件,可能会出现例如以下错误, UNEXPECTED TOP-LEVEL ERROR: java.util.concurrent.ExecutionException: java.io. ...

  8. Away3D引擎学习笔记(二)CameraController相机控制的应用

    cameraController---相机控制器 这里针对Away3D里面封装的CameraController的区别和使用做些简单介绍.相机控制器的设计思路比较清晰,所以难点东西不多.使用方面附上源 ...

  9. Spring Boot - 配置信息后处理

    最近在做项目的过程中,PSS提出配置文件中类似数据库连接需要的用户名.密码等敏感信息需要加密处理(之前一直是明文的). 为了快速完成任务,网上搜刮到jasypt包,也有相应的starter,使用方法可 ...

  10. 全站301跳转 PHP

    $the_host = $_SERVER['HTTP_HOST'];//取得当前域名 $request_uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER[ ...