namespace Comm { public static class DataConvert { /// <summary> /// 把DataRow對象轉成實體類。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dr"></param> /// <returns></returns> static public T ToEntity<T>(DataRow dr) where T : new() { if (dr == null) return default(T); //T t = Activator.CreateInstance<T>(); T t = new T(); PropertyInfo[] propertys = t.GetType().GetProperties(); DataColumnCollection Columns = dr.Table.Columns; foreach (PropertyInfo property in propertys) { if (!property.CanWrite) continue; string columnName = property.Name; if (Columns.Contains(columnName)) { object value = dr[columnName]; if (value is DBNull) continue; try { //property.SetValue(t, Convert.ChangeType(value, property.PropertyType), null); property.SetValue(t, value, null); } catch { continue; } } } return t; } /// <summary> /// 把DataTable對象轉成實體類的列表。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dt"></param> /// <returns></returns> static public List<T> ToEntityList<T>(DataTable dt) where T : new() { List<T> list = new List<T>(); if (dt != null && dt.Rows.Count > 0) { foreach (DataRow dr in dt.Rows) { list.Add(ToEntity<T>(dr)); } } return list; } /// <summary> /// 把IDataReader對象轉成實體類。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dr">需要參數的方法dr.Read()返回值為true。</param> /// <returns></returns> static private T DataReaderToEntity<T>(IDataReader dr) where T : new() { T t = new T(); PropertyInfo[] propertys = t.GetType().GetProperties(); List<string> fieldNameList = new List<string>(); for (int i = 0; i < dr.FieldCount; i++) { fieldNameList.Add(dr.GetName(i)); } foreach (PropertyInfo property in propertys) { if (!property.CanWrite) continue; string fieldName = property.Name; if (fieldNameList.Contains(fieldName)) { object value = dr[fieldName]; if (value is DBNull) continue; try { property.SetValue(t, value, null); } catch { continue; } } } return t; } /// <summary> /// 把IDataReader對象轉成實體類。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dr"></param> /// <returns></returns> static public T ToEntity<T>(IDataReader dr) where T : new() { if (dr != null && dr.Read()) { return DataReaderToEntity<T>(dr); } return default(T); } /// <summary> /// 把IDataReader對象轉成實體類的列表。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dr"></param> /// <returns></returns> static public List<T> ToEntityList<T>(IDataReader dr) where T : new() { List<T> list = new List<T>(); if (dr != null) { while (dr.Read()) { list.Add(DataReaderToEntity<T>(dr)); } } return list; } } }