1 /// <summary> 2 /// 數據表轉換類 3 /// </summary> 4 /// <typeparam name="T"></typeparam> 5 public class DbTableConvertor<T> where T : new() 6 { 7 /// <sum ...

1 /// <summary> 2 /// 數據表轉換類 3 /// </summary> 4 /// <typeparam name="T"></typeparam> 5 public class DbTableConvertor<T> where T : new() 6 { 7 /// <summary> 8 /// 將DataTable轉換為實體列表 9 /// </summary> 10 /// <param name="dt">待轉換的DataTable</param> 11 /// <returns></returns> 12 public List<T> ConvertToList(DataTable dt) 13 { 14 // 定義集合 15 var list = new List<T>(); 16 17 if (0 == dt.Rows.Count) 18 { 19 return list; 20 } 21 22 // 獲得此模型的可寫公共屬性 23 IEnumerable<System.Reflection.PropertyInfo> propertys = new T().GetType().GetProperties().Where(u => u.CanWrite); 24 list = ConvertToEntity(dt, propertys); 25 26 27 return list; 28 } 29 30 /// <summary> 31 /// 將DataTable的首行轉換為實體 32 /// </summary> 33 /// <param name="dt">待轉換的DataTable</param> 34 /// <returns></returns> 35 public T ConvertToEntity(DataTable dt) 36 { 37 DataTable dtTable = dt.Clone(); 38 dtTable.Rows.Add(dt.Rows[0].ItemArray); 39 return ConvertToList(dtTable)[0]; 40 } 41 private List<T> ConvertToEntity(DataTable dt, IEnumerable<System.Reflection.PropertyInfo> propertys) 42 { 43 var list = new List<T>(); 44 //遍歷DataTable中所有的數據行 45 foreach (DataRow dr in dt.Rows) 46 { 47 var entity = new T(); 48 49 //遍歷該對象的所有屬性 50 foreach (System.Reflection.PropertyInfo p in propertys) 51 { 52 //將屬性名稱賦值給臨時變數 53 string tmpName = p.Name; 54 55 //檢查DataTable是否包含此列(列名==對象的屬性名) 56 if (!dt.Columns.Contains(tmpName)) continue; 57 //取值 58 object value = dr[tmpName]; 59 //如果非空,則賦給對象的屬性 60 if (value != DBNull.Value) 61 { 62 p.SetValue(entity, value, null); 63 } 64 } 65 //對象添加到泛型集合中 66 list.Add(entity); 67 } 68 return list; 69 } 70 }View Code