DataTable、实体类Model和泛型List之间的转化

1.网上例子

http://www.2cto.com/kf/201204/127785.html

Serialize() 和getSendDetailTest()

2.研发中例子

dt转化成model

dt转化model Code
 1  public static object GetModel(DataTable dt, object model)
 2         {
 3 
 4             foreach (DataRow row in dt.Rows)
 5             {
 6                 foreach (var item in model.GetType().GetProperties())
 7                 {
 8                     if (row.Table.Columns.Contains(item.Name))
 9                     {
10                         if (DBNull.Value != row[item.Name])
11                         {
12                             item.SetValue(model, Convert.ChangeType(row[item.Name], item.PropertyType), null);
13                         }
14 
15                     }
16                 }
17             }
18             return model;
19         }

model 经过list 转化成dt

View Code
List<Sys_grade> list = new List<Sys_grade>();
                        list.Add(grade);
                        DataTable dtgrade = new DataTable();
                        dtgrade = KeyValueHelper.ListToDataTable(list);
                        daclient.SysGradeAdd(dtgrade);

ListToDataTable()方法:

View Code
 1   public static DataTable ListToDataTable<T>(List<T> entitys)
 2         {
 3 
 4             //检查实体集合不能为空
 5             if (entitys == null || entitys.Count < 1)
 6             {
 7                 return new DataTable();
 8             }
 9 
10             //取出第一个实体的所有Propertie
11             Type entityType = entitys[0].GetType();
12             PropertyInfo[] entityProperties = entityType.GetProperties();
13 
14             //生成DataTable的structure
15             //生产代码中,应将生成的DataTable结构Cache起来,此处略
16             DataTable dt = new DataTable("dt");
17             for (int i = 0; i < entityProperties.Length; i++)
18             {
19                 //dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType);
20                 dt.Columns.Add(entityProperties[i].Name);
21             }
22 
23             //将所有entity添加到DataTable中
24             foreach (object entity in entitys)
25             {
26                 //检查所有的的实体都为同一类型
27                 if (entity.GetType() != entityType)
28                 {
29                     throw new Exception("要转换的集合元素类型不一致");
30                 }
31                 object[] entityValues = new object[entityProperties.Length];
32                 for (int i = 0; i < entityProperties.Length; i++)
33                 {
34                     entityValues[i] = entityProperties[i].GetValue(entity, null);
35 
36                 }
37                 dt.Rows.Add(entityValues);
38             }
39             return dt;
40         }

备注:List<>:表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法。

最后:感谢网友提供资料。

原文地址:https://www.cnblogs.com/lei2007/p/2960278.html