C# DataTable轉List<T>--利用反射
阿新 • • 發佈:2018-11-09
/// <summary> /// 利用反射將Datatable轉換為List<T>物件 /// </summary> /// <typeparam name="T">集合</typeparam> /// <param name="dt"> datatable物件</param> /// <returns></returns> public List<T> DataTableToList<T>(DataTable dt) where T : new() { //定義集合 List<T> ts = new List<T>(); //定義一個臨時變數 string tempName = string.Empty; //遍歷dataTable中的資料行 foreach (DataRow dr in dt.Rows) { T t = new T(); //獲得此模型的公共屬性 PropertyInfo[] propertys = t.GetType().GetProperties(); //遍歷該物件的所有屬性 foreach (PropertyInfo pi in propertys) { tempName = pi.Name;//將屬性名稱賦值給臨時變數 //檢查datatable是否包含此列(列名==物件的屬性名) if (dt.Columns.Contains(tempName)) { //取值 object value = dr[tempName]; //如果非空,則賦給物件的屬性 if (value != DBNull.Value) { //這裡新增判斷的原因:比如double轉folat不能隱式轉換,而列舉型別又不能使用Convert.ChangeType if (pi.PropertyType.IsEnum) { pi.SetValue(t, value, null); } else { //ChangeType屬於強轉可能存在資料丟失,但是pi.PropertyType是對應你類成員的型別 pi.SetValue(t, Convert.ChangeType(value, pi.PropertyType), null); } } } } //物件新增到泛型集合中 ts.Add(t); } return ts; }
注:請引用反射using