C#將DataTable轉化為List


C#將DataTable轉化為List<T>

在使用三層架構開發一個網站時,希望把DataTable對象轉換為List<T>對象,於是在網上找資料,總結一個比較方便的方法來實現——使用反射。

思路:

  1. 初始化一個List<T>對象
  2. 獲取到T所有的屬性,初始化一個T對象
  3. 遍歷所有屬性,如果DataTable中含有相應屬性的值則為T對象賦值,如果沒有對應的列則檢查數據模型是否定義有誤(屬性名與列名比較時不區分大小寫)
  4. 將T對象添加到List<T>對象中

   總體代碼:

反射獲取到的屬性信息

DataTable中的列信息,對比上圖,我們會發現,屬性中首字母都是大寫,而列名則是采用的Camel命名,首字母是小寫,但是通過單步調試可以發現 dt.Columns.Contanis(tempName) 的返回值為true,由此可以證明,這樣比較時是不區分大小寫的

獲取到T對象信息

 1         /// <summary>  
 2         /// 利用反射將DataTable轉換為List<T>對象
 3         /// </summary>  
 4         /// <param name="dt">DataTable 對象</param>  
 5         /// <returns>List<T>集合</returns>  
 6         public static List<T> DataTableToList<T>(DataTable dt) where T :class,new ()
 7         {  
 8             // 定義集合  
 9             List<T> ts = new List<T>();  
10             //定義一個臨時變量  
11             string tempName = string.Empty;  
12             //遍歷DataTable中所有的數據行  
13             foreach (DataRow dr in dt.Rows)  
14             {  
15                 T t = new T();  
16                 // 獲得此模型的公共屬性  
17                 PropertyInfo[] propertys = t.GetType().GetProperties();  
18                 //遍歷該對象的所有屬性  
19                 foreach (PropertyInfo pi in propertys)  
20                 {  
21                     tempName = pi.Name;//將屬性名稱賦值給臨時變量  
22                     //檢查DataTable是否包含此列(列名==對象的屬性名)    
23                     if (dt.Columns.Contains(tempName))  
24                     {  
25                         //取值  
26                         object value = dr[tempName];
27                          //如果非空,則賦給對象的屬性  
28                          if (value != DBNull.Value)
29                          {
30                              pi.SetValue(t,value,null);  
31                          }    
32                     }  
33                 }  
34                 //對象添加到泛型集合中  
35                 ts.Add(t);  
36             }  
37             return ts;  
38         }
View Code

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM