程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 通過反射填充泛型集合List的靜態方法

通過反射填充泛型集合List的靜態方法

編輯:.NET實例教程

呃```花了一晚上時間,終於搞出來了如何通過反射,從DataReader將數據填充到數據實體泛型集合的靜態方法.

 

//Kchen.Core.BaseBusinessObject為通用數據實體類,此處僅為限定T所繼承的類型
        public static IList<T> FillDataListGeneric<T>(System.Data.IDataReader reader) where T : Kchen.Core.BaseBusinessObject
        {
            //實例化一個List<>泛型集合
            IList<T> DataList = new List<T>();
            while (reader.Read())
            {
                //由於是是未知的類型,所以必須通過Activator.CreateInstance<T>()方法來依據T的類型動態創建數據實體對象
                T RowInstance = Activator.CreateInstance<T>();
                //通過反射取得對象所有的Property
                foreach (PropertyInfo Property in typeof(T).GetPropertIEs())
                {
                    //BindingFIEldAttribute為自定義的Attribute,用於與數據庫字段進行綁定
                    foreach (BindingFieldAttribute FieldAttr in Property.GetCustomAttributes(typeof(BindingFIEldAttribute), true))
                    {
                        try
                        {
                            //取得當前數據庫字段的順序
                            int Ordinal = reader.GetOrdinal(FieldAttr.FIEldName);
                            if (reader.GetValue(Ordinal) != DBNull.Value)
                          &nbsp; {
                                //將DataReader讀取出來的數據填充到對象實體的屬性裡
                                Property.SetValue(RowInstance, Convert.ChangeType(reader.GetValue(Ordinal), Property.PropertyType), null);
                            }
                        }
                        catch
                        {
                            break;
                        }
                    }
                }
                //將數據實體對象add到泛型集合中
                DataList.Add(RowInstance);
            }
            return DataList;
        }
調用的時候使用如下代碼

            //偽代碼 OleDbDataReader _ds = 創建一個OleDbDataReader
            IList<Product> _result = Kchen.UtilitIEs.FillDataListGeneric<Product>(_ds);

此靜態方法通過一個實體類型和DateReader,快速的將數據填充到數據實體泛型集合中.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved