国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

DataTable與DTO對象的簡易轉換類

2019-11-17 01:52:10
字體:
來源:轉載
供稿:網友

DataTable與DTO對象的簡易轉換類

  在web開發過程中,有時候為了數據傳輸的方便,比如:后臺需要更新前端的ViewModel,此時我們定義一個與前端ViewModel結構一樣的DTO對象,從數據層獲取數據后,將數據封裝成DTO然后序列化為json傳回前端,由于我正在開發的項目中的Model是用DataSet來實現的,不是純粹的面向對象(如果Model是對象的話可以用AutoMapper來實現轉換),所以從數據層獲取的都是DataSet或DataTable,這時需要將DataTable轉換為DTO對象,DTO對象的屬性與DataTable的列之間并不是一一對應的關系,為了轉換方便,實現了一個簡易的轉換類,代碼如下:

  1 public class DtObjConverter  2     {  3   4         /// <summary>  5         /// 將DataTable轉換成對象,對象的屬性與列同名  6         /// </summary>  7         /// <typeparam name="T"></typeparam>  8         /// <param name="datatable"></param>  9         /// <returns></returns> 10         public List<T> ConvertTo<T>(DataTable datatable) where T : new() 11         { 12             List<T> Temp = new List<T>(); 13             try 14             { 15                 List<string> columnsNames = new List<string>(); 16                 foreach (DataColumn DataColumn in datatable.Columns) 17                     columnsNames.Add(DataColumn.ColumnName); 18                 Temp = datatable.AsEnumerable().ToList().ConvertAll<T>(row => getObject<T>(row, columnsNames)); 19                 return Temp; 20             } 21             catch 22             { 23                 return Temp; 24             } 25  26         } 27  28         /// <summary> 29         /// 將DataTable轉換成對象,對象的屬性會根據map參數進行轉換 30         /// </summary> 31         /// <typeparam name="T"></typeparam> 32         /// <param name="datatable"></param> 33         /// <param name="map"></param> 34         /// <returns></returns> 35         public List<T> ConvertTo<T>(DataTable datatable, Hashtable map) where T : new() 36         { 37             List<T> Temp = new List<T>(); 38             try 39             { 40                 List<string> columnsNames = new List<string>(); 41                 foreach (DataColumn DataColumn in datatable.Columns) 42                     columnsNames.Add(DataColumn.ColumnName); 43                 Temp = datatable.AsEnumerable().ToList().ConvertAll<T>(row => getMapObject<T>(row, columnsNames, map)); 44                 return Temp; 45             } 46             catch 47             { 48                 return Temp; 49             } 50  51         } 52  53         /// <summary> 54         /// 根據DataTable生成對象,對象的屬性與列同名 55         /// </summary> 56         /// <typeparam name="T"></typeparam> 57         /// <param name="row"></param> 58         /// <param name="columnsName"></param> 59         /// <returns></returns> 60         public T getObject<T>(DataRow row, List<string> columnsName) where T : new() 61         { 62             T obj = new T(); 63             try 64             { 65                 string columnname = ""; 66                 string value = ""; 67                 PRopertyInfo[] Properties; 68                 Properties = typeof(T).GetProperties(); 69                 foreach (PropertyInfo objProperty in Properties) 70                 { 71                     columnname = columnsName.Find(name => name.ToLower() == objProperty.Name.ToLower()); 72                     if (!string.IsNullOrEmpty(columnname)) 73                     { 74                         value = row[columnname].ToString(); 75                         if (!string.IsNullOrEmpty(value)) 76                         { 77                             if (Nullable.GetUnderlyingType(objProperty.PropertyType) != null) 78                             { 79                                 value = row[columnname].ToString().Replace("$", "").Replace(",", ""); 80                                 objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(Nullable.GetUnderlyingType(objProperty.PropertyType).ToString())), null); 81                             } 82                             else 83                             { 84                                 value = row[columnname].ToString().Replace("%", ""); 85                                 objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(objProperty.PropertyType.ToString())), null); 86                             } 87                         } 88                     } 89                 } 90                 return obj; 91             } 92             catch 93             { 94                 return obj; 95             } 96         } 97  98         /// <summary> 99         /// 根據DataTable生成對象,對象的屬性會根據map參數進行轉換100         /// </summary>101         /// <typeparam name="T"></typeparam>102         /// <param name="row"></param>103         /// <param name="columnsName"></param>104         /// <returns></returns>105         public T getMapObject<T>(DataRow row, List<string> columnsName, Hashtable map) where T : new()106         {107             T obj = new T();108             try109             {110                 string columnname = "";111                 string value = "";112                 PropertyInfo[] Properties;113                 Properties = typeof(T).GetProperties();114                 foreach (PropertyInfo objProperty in Properties)115                 {116                     string prpertyName = objProperty.Name;117                     columnname = columnsName.Find(name => name.ToLower() == map[prpertyName].ToString().ToLower());118                     if (!string.IsNullOrEmpty(columnname))119                     {120                         value = row[columnname].ToString();121                         if (!string.IsNullOrEmpty(value))122                         {123                             if (Nullable.GetUnderlyingType(objProperty.PropertyType) != null)124                             {125                                 value = row[columnname].ToString().Replace("$", "").Replace(",", "");126                                 objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(Nullable.GetUnderlyingType(objProperty.PropertyType).ToString())), null);127                             }128                             else129                             {130                                 value = row[columnname].ToString().Replace("%", "");131                                 objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(objProperty.PropertyType.ToString())), null);132                             }133                         }134                     }135                 }136                 return obj;137             }138             catch (Exception e)139             {140                 string error = e.Message;141                 return obj;142             }143         }144 145         public DataTable ToDataTable<T>(IEnumerable<T> collection)146         {147             DataTable newDataTable = new DataTable();148             Type impliedType = typeof(T);149             PropertyInfo[] _propInfo = impliedType.GetProperties();150             foreach (PropertyInfo pi in _propInfo)151                 newDataTable.Columns.Add(pi.Name, pi.PropertyType);152 153             foreach (T item in collection)154             {155                 DataRow newDataRow = newDataTable.NewRow();156                 newDataRow.BeginEdit();157                 foreach (PropertyInfo pi in _propInfo)158                     newDataRow[pi.Name] = pi.GetValue(item, null);159                 newDataRow.EndEdit();160                 newDataTable.Rows.Add(newDataRow);161             }162             return newDataTable;163         }164 165     }

用法:

DtObjConverterConvert convert = new DtObjConverterConvert ();//配置映射Hashtable map = new Hashtable();map.Add("Title", "name");  //key為對象屬性名,value為表列名/*----- 此處省略其他字段的添加 -----*/List<YourDTOModel> dtoModelList = convert.ConvertTo<YourDTOModel>(dt, map);


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高邑县| 朝阳市| 吴江市| 鄄城县| 灵石县| 镇江市| 保定市| 资源县| 安宁市| 特克斯县| 星子县| 昌都县| 甘肃省| 中超| 麦盖提县| 安阳市| 卢湾区| 连州市| 南康市| 浏阳市| 凤台县| 灌云县| 康保县| 衡阳县| 中超| 潜山县| 唐山市| 洪泽县| 横峰县| 昌平区| 仁布县| 砚山县| 革吉县| 四会市| 湘阴县| 大埔区| 汽车| 临湘市| 思南县| 谢通门县| 兰考县|