datatable与实体类之间相互转化的几种方法

我不是女神ヾ 2021-12-15 15:11 393阅读 0赞
  1. #region DataTable转换成实体类
  2. /// <summary>
  3. /// 填充对象列表:用DataSet的第一个表填充实体类
  4. /// </summary>
  5. /// <param name="ds">DataSet</param>
  6. /// <returns></returns>
  7. public List<T> FillModel(DataSet ds)
  8. {
  9. if (ds == null || ds.Tables[0] == null || ds.Tables[0].Rows.Count == 0)
  10. {
  11. return null;
  12. }
  13. else
  14. {
  15. return FillModel(ds.Tables[0]);
  16. }
  17. }
  18. /// <summary>
  19. /// 填充对象列表:用DataSet的第index个表填充实体类
  20. /// </summary>
  21. public List<T> FillModel(DataSet ds, int index)
  22. {
  23. if (ds == null || ds.Tables.Count <= index || ds.Tables[index].Rows.Count == 0)
  24. {
  25. return null;
  26. }
  27. else
  28. {
  29. return FillModel(ds.Tables[index]);
  30. }
  31. }
  32. /// <summary>
  33. /// 填充对象列表:用DataTable填充实体类
  34. /// </summary>
  35. public List<T> FillModel(DataTable dt)
  36. {
  37. if (dt == null || dt.Rows.Count == 0)
  38. {
  39. return null;
  40. }
  41. List<T> modelList = new List<T>();
  42. foreach (DataRow dr in dt.Rows)
  43. {
  44. //T model = (T)Activator.CreateInstance(typeof(T));
  45. T model = new T();
  46. for (int i = 0; i < dr.Table.Columns.Count; i++)
  47. {
  48. PropertyInfo propertyInfo = model.GetType().GetProperty(dr.Table.Columns[i].ColumnName);
  49. if (propertyInfo != null && dr[i] != DBNull.Value)
  50. propertyInfo.SetValue(model, dr[i], null);
  51. }
  52. modelList.Add(model);
  53. }
  54. return modelList;
  55. }
  56. /// <summary>
  57. /// 填充对象:用DataRow填充实体类
  58. /// </summary>
  59. public T FillModel(DataRow dr)
  60. {
  61. if (dr == null)
  62. {
  63. return default(T);
  64. }
  65. //T model = (T)Activator.CreateInstance(typeof(T));
  66. T model = new T();
  67. for (int i = 0; i < dr.Table.Columns.Count; i++)
  68. {
  69. PropertyInfo propertyInfo = model.GetType().GetProperty(dr.Table.Columns[i].ColumnName);
  70. if (propertyInfo != null && dr[i] != DBNull.Value)
  71. propertyInfo.SetValue(model, dr[i], null);
  72. }
  73. return model;
  74. }
  75. #endregion
  76. #region 实体类转换成DataTable
  77. /// <summary>
  78. /// 实体类转换成DataSet
  79. /// </summary>
  80. /// <param name="modelList">实体类列表</param>
  81. /// <returns></returns>
  82. public DataSet FillDataSet(List<T> modelList)
  83. {
  84. if (modelList == null || modelList.Count == 0)
  85. {
  86. return null;
  87. }
  88. else
  89. {
  90. DataSet ds = new DataSet();
  91. ds.Tables.Add(FillDataTable(modelList));
  92. return ds;
  93. }
  94. }
  95. /// <summary>
  96. /// 实体类转换成DataTable
  97. /// </summary>
  98. /// <param name="modelList">实体类列表</param>
  99. /// <returns></returns>
  100. public DataTable FillDataTable(List<T> modelList)
  101. {
  102. if (modelList == null || modelList.Count == 0)
  103. {
  104. return null;
  105. }
  106. DataTable dt = CreateData(modelList[0]);
  107. foreach (T model in modelList)
  108. {
  109. DataRow dataRow = dt.NewRow();
  110. foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
  111. {
  112. dataRow[propertyInfo.Name] = propertyInfo.GetValue(model, null);
  113. }
  114. dt.Rows.Add(dataRow);
  115. }
  116. return dt;
  117. }
  118. /// <summary>
  119. /// 根据实体类得到表结构
  120. /// </summary>
  121. /// <param name="model">实体类</param>
  122. /// <returns></returns>
  123. private DataTable CreateData(T model)
  124. {
  125. DataTable dataTable = new DataTable(typeof(T).Name);
  126. foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
  127. {
  128. dataTable.Columns.Add(new DataColumn(propertyInfo.Name, propertyInfo.PropertyType));
  129. }
  130. return dataTable;
  131. }
  132. #endregion

  

-——————————
来源:CSDN
原文:https://blog.csdn.net/a11112244444/article/details/78921200
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/Blue-ZXL/p/10823983.html

发表评论

表情:
评论列表 (有 0 条评论,393人围观)

还没有评论,来说两句吧...

相关阅读