C# – IDataReader到使用泛型的对象映射

前端之家收集整理的这篇文章主要介绍了C# – IDataReader到使用泛型的对象映射前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何使用泛型将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);
            }
        }
    }

猜你在找的C#相关文章