雖然大數據量的環境下,經過反射轉換DataRow爲對象性能會很低,可是在數據量適中的時候,這樣可以減小不少的代碼量,性能也確實不錯。html
因此在數據量不是很大的狀況下,推薦使用。post
若是數據量很大,能夠使用Emit來提升性能,最近也在研究它,網上也有不少這方面的資料。性能
我定義了一個DataRow的擴張方法,以下:大數據
1 using System; 2 using System.Data; 3 using System.Reflection; 4 5 namespace YCG.FCL.Common.ExtensionMethods 6 { 7 public static class DataRowExtension 8 { 9 /// <summary> 10 /// Convert data row to corresponding model.. 11 /// </summary> 12 /// <typeparam name="T">Model</typeparam> 13 /// <param name="dataRow">Data Row.</param> 14 /// <returns>Model Object.</returns> 15 public static T GenerateInfo<T>(this DataRow dataRow) where T : class ,new() 16 { 17 if (dataRow == null) throw new ArgumentNullException(); 18 T t = new T(); 19 Type type = typeof(T); 20 PropertyInfo[] propertyInfos = type.GetProperties(); 21 foreach (PropertyInfo propertyInfo in propertyInfos) 22 { 23 string propertyName = propertyInfo.Name; 24 if (dataRow.Table.Columns.Contains(propertyName)) 25 { 26 object value = dataRow[propertyName]; 27 if (value != null && value != DBNull.Value) 28 { 29 if (propertyInfo.PropertyType.IsEnum) 30 { 31 propertyInfo.SetValue(t, Enum.Parse(propertyInfo.PropertyType, value.ToString()), null); 32 //propertyInfo.SetValue(t, Enum.ToObject(propertyInfo.PropertyType, value.ToInt32()), null); 33 } 34 else 35 { 36 switch (propertyInfo.PropertyType.Name) 37 { 38 case "Int32": 39 propertyInfo.SetValue(t, value.ToInt32(), null); 40 break; 41 case "DateTime": 42 propertyInfo.SetValue(t, value.ToDateTime(), null); 43 break; 44 case "Boolean": 45 propertyInfo.SetValue(t, value.ToBool(), null); 46 break; 47 case "Double": 48 propertyInfo.SetValue(t, value.ToDouble(), null); 49 break; 50 //case "Byte[]": 51 // propertyInfo.SetValue(t, value.ToBytes(), null); 52 // break; 53 default: 54 propertyInfo.SetValue(t, value, null); 55 break; 56 } 57 } 58 } 59 } 60 } 61 return t; 62 } 63 64 public static T GenerateInfo<T>(this DataRow dataRow, Func<DataRow, T> func) where T : class,new() 65 { 66 if (dataRow == null) return new T(); 67 return func(dataRow); 68 } 69 } 70 }
好了,就這麼多了。ui
最近在設計數據訪問層,真的只有當本身動手去作的時候,才知道本身知識的侷限性,可能要到過年以前才能完整的設計好。this
因此關於這方面的文章還要過段時間才能寫出來。url
以同步至:我的文章目錄索引spa