打印

[asp.net教程] 通过反射填充泛型集合list的静态方法

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

呃```花了一晚上时间,终于搞出来了如何通过反射,从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

TOP

返回顶部
AYBlue

Processed in 0.046009 second(s), 7 queries.

当前时区 GMT+8, 现在时间是 2009-1-10 11:30 京ICP备06054220号

清除 Cookies - 联系我们 - 163K.com - Archiver - WAP