C# – IDataReader到使用泛型的对象映射
发布时间:2020-12-15 03:50:53 所属栏目:百科 来源:网络整理
导读:如何使用泛型将DataReader对象映射到类对象? 例如我需要执行以下操作: public class MapperT { public static ListT MapObject(IDataReader dr) { ListT objects = new ListT(); while (dr.Read()) { //Mapping goes here... } return objects; } } 后来我
如何使用泛型将DataReader对象映射到类对象?
例如我需要执行以下操作: public class Mapper<T> { public static List<T> MapObject(IDataReader dr) { List<T> objects = new List<T>(); while (dr.Read()) { //Mapping goes here... } return objects; } } 后来我需要调用这个类方法,如下所示: IDataReder dataReader = DBUtil.Fetchdata("SELECT * FROM Book"); List<Book> bookList = Mapper<Book>.MapObject(dataReder); foreach (Book b in bookList) { Console.WriteLine(b.ID + "," + b.BookName); } 请注意,Mapper类应该能够映射由T表示的任何类型的对象. 解决方法
我用这个
ValueInjecter
我这样做: while (dr.Read()) { var o = new User(); o.InjectFrom<DataReaderInjection>(dr); yield return o; } 你会需要这个ValueInjection来工作: public class DataReaderInjection : KnownSourceValueInjection<IDataReader> { protected override void Inject(IDataReader source,object target,PropertyDescriptorCollection targetProps) { for (var i = 0; i < source.FieldCount; i++) { var activeTarget = targetProps.GetByName(source.GetName(i),true); if (activeTarget == null) continue; var value = source.GetValue(i); if (value == DBNull.Value) continue; activeTarget.SetValue(target,value); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |