设为首页
加入收藏
站内地图
旧版入口
当前位置:首页 > 站长学院 > 网络编程 > ASP.NET

通过反射填充泛型集合List的静态方法

作者:佚名 出处:网络转载 时间:11-15 点击:

内容载入中...
     呃```花了一晚上时间,终于搞出来了如何通过反射,从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)
   {
   //将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,快速的将数据填充到数据实体泛型集合中.
  
  http://www.cnblogs.com/kchen/archive/2006/10/31/545011.HTML
  
  
    。

收藏本文:
】【打印页面】【推荐给朋友】【关闭窗口
<< 上一篇 :dot net html分析类库
>> 下一篇 :存储过程的分析

站长学院

推荐信息