1. List<info> infos = Dal.GetInfos();
  2. DataTable dt = new DataTable();
  3. dt.Columns.Add("cName");
  4. foreach (var info in infos)
  5. {
  6. DataRow dr = dt.NewRow();
  7. dr["cName"] = info.Name;
  8. dt.Add(dr);
  9. }

网上的:

    1. public static class DataTableExtensions
    2. {
    3. /// <summary>
    4. /// 转化一个DataTable
    5. /// </summary>
    6. /// <typeparam name="T"></typeparam>
    7. /// <param name="list"></param>
    8. /// <returns></returns>
    9. public static DataTable ToDataTable<T>(this IEnumerable<T> list)
    10. {
    11. //创建属性的集合
    12. List<PropertyInfo> pList = new List<PropertyInfo>();
    13. //获得反射的入口
    14. Type type = typeof(T);
    15. DataTable dt = new DataTable();
    16. //把所有的public属性加入到集合 并添加DataTable的列
    17. Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, p.PropertyType); });
    18. foreach (var item in list)
    19. {
    20. //创建一个DataRow实例
    21. DataRow row = dt.NewRow();
    22. //给row 赋值
    23. pList.ForEach(p => row[p.Name] = p.GetValue(item, null));
    24. //加入到DataTable
    25. dt.Rows.Add(row);
    26. }
    27. return dt;
    28. }
    29. /// <summary>
    30. /// DataTable 转换为List 集合
    31. /// </summary>
    32. /// <typeparam name="TResult">类型</typeparam>
    33. /// <param name="dt">DataTable</param>
    34. /// <returns></returns>
    35. public static List<T> ToList<T>(this DataTable dt) where T : class, new()
    36. {
    37. //创建一个属性的列表
    38. List<PropertyInfo> prlist = new List<PropertyInfo>();
    39. //获取TResult的类型实例  反射的入口
    40. Type t = typeof(T);
    41. //获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加入到属性列表
    42. Array.ForEach<PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) prlist.Add(p); });
    43. //创建返回的集合
    44. List<T> oblist = new List<T>();
    45. foreach (DataRow row in dt.Rows)
    46. {
    47. //创建TResult的实例
    48. T ob = new T();
    49. //找到对应的数据  并赋值
    50. prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) p.SetValue(ob, row[p.Name], null); });
    51. //放入到返回的集合中.
    52. oblist.Add(ob);
    53. }
    54. return oblist;
    55. }
    56. /// <summary>
    57. /// 将集合类转换成DataTable
    58. /// </summary>
    59. /// <param name="list">集合</param>
    60. /// <returns></returns>
    61. public static DataTable ToDataTableTow(IList list)
    62. {
    63. DataTable result = new DataTable();
    64. if (list.Count > 0)
    65. {
    66. PropertyInfo[] propertys = list[0].GetType().GetProperties();
    67. foreach (PropertyInfo pi in propertys)
    68. {
    69. result.Columns.Add(pi.Name, pi.PropertyType);
    70. }
    71. for (int i = 0; i < list.Count; i++)
    72. {
    73. ArrayList tempList = new ArrayList();
    74. foreach (PropertyInfo pi in propertys)
    75. {
    76. object obj = pi.GetValue(list[i], null);
    77. tempList.Add(obj);
    78. }
    79. object[] array = tempList.ToArray();
    80. result.LoadDataRow(array, true);
    81. }
    82. }
    83. return result;
    84. }
    85. /**/
    86. /// <summary>
    87. /// 将泛型集合类转换成DataTable
    88. /// </summary>
    89. /// <typeparam name="T">集合项类型</typeparam>
    90. /// <param name="list">集合</param>
    91. /// <returns>数据集(表)</returns>
    92. public static DataTable ToDataTable<T>(IList<T> list)
    93. {
    94. return ToDataTable<T>(list, null);
    95. }
    96. /**/
    97. /// <summary>
    98. /// 将泛型集合类转换成DataTable
    99. /// </summary>
    100. /// <typeparam name="T">集合项类型</typeparam>
    101. /// <param name="list">集合</param>
    102. /// <param name="propertyName">需要返回的列的列名</param>
    103. /// <returns>数据集(表)</returns>
    104. public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)
    105. {
    106. List<string> propertyNameList = new List<string>();
    107. if (propertyName != null)
    108. propertyNameList.AddRange(propertyName);
    109. DataTable result = new DataTable();
    110. if (list.Count > 0)
    111. {
    112. PropertyInfo[] propertys = list[0].GetType().GetProperties();
    113. foreach (PropertyInfo pi in propertys)
    114. {
    115. if (propertyNameList.Count == 0)
    116. {
    117. result.Columns.Add(pi.Name, pi.PropertyType);
    118. }
    119. else
    120. {
    121. if (propertyNameList.Contains(pi.Name))
    122. result.Columns.Add(pi.Name, pi.PropertyType);
    123. }
    124. }
    125. for (int i = 0; i < list.Count; i++)
    126. {
    127. ArrayList tempList = new ArrayList();
    128. foreach (PropertyInfo pi in propertys)
    129. {
    130. if (propertyNameList.Count == 0)
    131. {
    132. object obj = pi.GetValue(list[i], null);
    133. tempList.Add(obj);
    134. }
    135. else
    136. {
    137. if (propertyNameList.Contains(pi.Name))
    138. {
    139. object obj = pi.GetValue(list[i], null);
    140. tempList.Add(obj);
    141. }
    142. }
    143. }
    144. object[] array = tempList.ToArray();
    145. result.LoadDataRow(array, true);
    146. }
    147. }
    148. return result;
    149. }
    150. }

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

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

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

  2. linq之将IEnumerable<T>类型的集合转换为DataTable类型 (转载)

    在考虑将表格数据导出成excel的时候,网上搜的时候找到一个特别合适的公共方法,可以将query查询出来的集合转换为datatable 需引用using System.Reflection; publ ...

  3. Json 字符串 转换为 DataTable数据集合

    /// <summary> /// 将json转换为DataTable /// </summary> /// <param name="strJson" ...

  4. c#常用的Datable转换为json,以及json转换为DataTable操作方法

    #region  DataTable 转换为Json字符串实例方法 /// <summary> /// GetClassTypeJosn 的摘要说明 /// </summary> ...

  5. [工具类]泛型集合转换为DataTable

    写在前面 在实际项目中,用到了将集合转换为DataTable,就试着封装了一个方法,记录一下. 代码 using System; using System.Collections.Generic; u ...

  6. 泛型集合转换为DataTable

    在做项目中,遇到了将集合转换为DataTable的使用,在网上看了资料,在这里记录下来,分享. using System; using System.Collections.Generic; usin ...

  7. 【c#操作office】--OleDbDataAdapter 与OleDbDataReader方式读取excel,并转换为datatable

    OleDbDataAdapter方式: /// <summary> /// 读取excel的表格放到DataTable中 ---OleDbDataAdapter /// </summ ...

  8. C#基础知识之泛型集合转换为DataTable

    在做项目中,遇到了将集合转换为DataTable的使用,在网上看了资料,在这里记录下来,分享. using System; using System.Collections.Generic; usin ...

  9. Enumerable转换为DataTable

    今天在项目组公共类库中发现一个 Enumerable类型转换为DataTable,写的挺精简的,拿出来跟大家共享一下. using System; using System.Collections.G ...

  10. 把List<T>转换为DataTable

    下面这个学习,把List<T>转换为Datatable. 下面先创建一个对象T: class Ay { private int _ID; public int ID { get { ret ...

随机推荐

  1. css中的zoom

    CSS中zoom:1的作用兼容IE6.IE7.IE8浏览器,经常会遇到一些问题,可以使用zoom:1来解决,有如下作用:触发IE浏览器的haslayout解决ie下的浮动,margin重叠等一些问题. ...

  2. netty4 Handler的执行顺序

    转载:https://my.oschina.net/jamaly/blog/272385 Handler在netty中,无疑占据着非常重要的地位.Handler与Servlet中的filter很像,通 ...

  3. Axis2 webservice入门--开发环境搭建,概念理解

    关于webservice的概念,网上有各种解释,但是不太好懂. 可以这样理解:1.一个webservice就是一个“功能”,只是这个功能是别人写好的,被放在别人的网站上.                ...

  4. ASP.NET-【Excel】-将Excel中的数据批量加载到SQLserver数据库

    用到了一个SqlBulkCopy的类 核心代码分析 代码我还没有测试过 string excelConnectionString = string.Format("Provider=Micr ...

  5. 在SQLite中创建数据库时总是提示错误?

    答案:原先以为是因为编码影响的其实不是,是因为逗号和分号的原因,不是标准的英文状态下的格式

  6. bzoj 2127: happiness

    #include<cstdio> #include<iostream> #include<cstring> #define M 100009 #define inf ...

  7. UITableViewStyleGrouped 模式下 headview 多出一块高度问题

    self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.tableView ...

  8. 如何判断Intent有没有对应的Activity去处理?

    如何判断Intent有没有对应的Activity去处理?至少有以下两种方法,最近使用过,随笔记下来,以供查阅. 第一种, 如下: public boolean isIntentResolvable(I ...

  9. COJ 1287 求匹配串在模式串中出现的次数

    这里要在后缀自动机的节点中维护一个从到达当前位置出现的字符串总个数 这里新添加进来的节点的状态出现的次数必然为1 另外包含所能达到这个节点所能到达的状态一定是将它作为父亲的点 那么说明将它作为父亲的点 ...

  10. Problem C HDU 5224

    Description There is a piece of paper in front of Tom, its length and width are integer. Tom knows t ...