Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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);
- }
- while (dr.Read())
- {
- var o = new User();
- o.InjectFrom<DataReaderInjection>(dr);
- yield return o;
- }
- 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);
- }
- }
- }
- public static IEnumerable<T> MapObject(IDataReader dr, Func<IDataReader, T> convertFunction)
- {
- while (dr.Read())
- {
- yield return convertFunction(dr);
- }
- }
- abstract class DataMapper
- {
- abstract public object Map(IDataReader);
- }
- class BookMapper : DataMapper
- {
- override public object Map(IDataReader reader)
- {
- ///some mapping stuff
- return book;
- }
- }
- public class Mapper<T>
- {
- public static List<T> MapObject(IDataReader dr)
- {
- List<T> objects = new List<T>();
- DataMapper myMapper = getMapperFor(T);
- while (dr.Read())
- {
- objects.Add((T)myMapper(dr));
- }
- return objects;
- }
- private DataMapper getMapperFor(T myType)
- {
- //switch case or if or whatever
- ...
- if(T is Book) return bookMapper;
- }
- }
Add Comment
Please, Sign In to add comment