最近比較忙,好久沒寫博客了。個人感覺最好的進步就是寫東西。哈哈。 一般我們使用ADO.net從資料庫中讀取數據返回的集合是DataSet類型的。有時候我們需要進行轉換成List<T>集合。一般的做法是在DAL層中,寫個方法進行轉換。(每個表寫一個)。累哦!~ 所以我就想,能不能寫個工廠,傳入Data ...
最近比較忙,好久沒寫博客了。個人感覺最好的進步就是寫東西。哈哈。
一般我們使用ADO.net從資料庫中讀取數據返回的集合是DataSet類型的。有時候我們需要進行轉換成List<T>集合。一般的做法是在DAL層中,寫個方法進行轉換。(每個表寫一個)。累哦!~
所以我就想,能不能寫個工廠,傳入DataSet 集合 和 需要轉化的類的類型。就自動轉化了。就有了下麵的代碼了。
1 /// <summary> 2 /// Dataset 集合根據傳入的 類型。自動轉換List集合" 3 /// </summary> 4 /// <typeparam name="T">類(屬性類 modle)</typeparam> 5 /// <param name="ds">數據集合</param> 6 /// <returns>List集合</returns> 7 public List<T> GetListbyDataSet<T>(DataSet ds) where T: new() 8 { 9 List<T> li = new List<T>(); //聲明要返回的集合 10 var s = typeof(T); // 獲取傳入類型 11 var str = s.GetProperties(); // 獲取傳入類型的屬性集合 12 if (ds.Tables[0] == null || ds.Tables[0].Rows.Count < 0) //判斷ds的null和是否包含數據 13 { 14 return li; 15 } 16 for (int i = 0; i < ds.Tables[0].Rows.Count; i++) //迴圈集合準備獲取數據 17 { 18 T t1 = new T(); // 聲明類 19 foreach (var item in str) // 迴圈類的屬性 20 { 21 string itemstr = item.Name; //類屬性名稱 22 var itemtype = item.PropertyType; // 類屬性的類型(int string datetime) 23 object value = GetvalbyDataSet(itemstr, itemtype, ds.Tables[0].Rows[i]); //獲取值 24 item.SetValue(t1, value, null); 25 26 } 27 li.Add(t1); 28 } 29 return li; 30 }View Code
1 /// <summary> 2 /// 在DataRow中 獲取 對應列的值 3 /// </summary> 4 /// <param name="colname">列名稱</param> 5 /// <param name="colname">列的類型</param> 6 /// <param name="dr">DataRow 集合</param> 7 /// <returns>列值</returns> 8 private object GetvalbyDataSet(string colname,Type coltype, DataRow dr) 9 { 10 if (dr.Table.Columns.Contains(colname)) 11 { 12 if (typeof(int) == coltype) 13 { 14 return dr[colname] == null ? 0 : int.Parse(dr[colname].ToString()); 15 } 16 if (typeof(DateTime) == coltype) 17 { 18 return dr[colname] == null ? DateTime.Parse("2016/9/22") : DateTime.Parse(dr[colname].ToString()); 19 } 20 if (typeof(decimal) == coltype) 21 { 22 return dr[colname] == null ? decimal.Parse("0") : decimal.Parse(dr[colname].ToString()); 23 } 24 string str = dr[colname] == null ? "" : dr[colname].ToString(); 25 return str; 26 } 27 else 28 { 29 return ""; 30 } 31 }View Code