Guest User

Untitled

a guest
Mar 17th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. public class Mapper<T>
  2. {
  3. public static List<T> MapObject(IDataReader dr)
  4. {
  5. List<T> objects = new List<T>();
  6.  
  7. while (dr.Read())
  8. {
  9. //Mapping goes here...
  10. }
  11.  
  12. return objects;
  13. }
  14. }
  15.  
  16. IDataReder dataReader = DBUtil.Fetchdata("SELECT * FROM Book");
  17.  
  18. List<Book> bookList = Mapper<Book>.MapObject(dataReder);
  19.  
  20. foreach (Book b in bookList)
  21. {
  22. Console.WriteLine(b.ID + ", " + b.BookName);
  23. }
  24.  
  25. while (dr.Read())
  26. {
  27. var o = new User();
  28. o.InjectFrom<DataReaderInjection>(dr);
  29. yield return o;
  30. }
  31.  
  32. public class DataReaderInjection : KnownSourceValueInjection<IDataReader>
  33. {
  34. protected override void Inject(IDataReader source, object target, PropertyDescriptorCollection targetProps)
  35. {
  36. for (var i = 0; i < source.FieldCount; i++)
  37. {
  38. var activeTarget = targetProps.GetByName(source.GetName(i), true);
  39. if (activeTarget == null) continue;
  40.  
  41. var value = source.GetValue(i);
  42. if (value == DBNull.Value) continue;
  43.  
  44. activeTarget.SetValue(target, value);
  45. }
  46. }
  47. }
  48.  
  49. public static IEnumerable<T> MapObject(IDataReader dr, Func<IDataReader, T> convertFunction)
  50. {
  51. while (dr.Read())
  52. {
  53. yield return convertFunction(dr);
  54. }
  55. }
  56.  
  57. abstract class DataMapper
  58. {
  59. abstract public object Map(IDataReader);
  60. }
  61.  
  62. class BookMapper : DataMapper
  63. {
  64. override public object Map(IDataReader reader)
  65. {
  66. ///some mapping stuff
  67. return book;
  68. }
  69. }
  70.  
  71. public class Mapper<T>
  72. {
  73. public static List<T> MapObject(IDataReader dr)
  74. {
  75. List<T> objects = new List<T>();
  76. DataMapper myMapper = getMapperFor(T);
  77. while (dr.Read())
  78. {
  79. objects.Add((T)myMapper(dr));
  80. }
  81.  
  82. return objects;
  83. }
  84.  
  85. private DataMapper getMapperFor(T myType)
  86. {
  87. //switch case or if or whatever
  88. ...
  89. if(T is Book) return bookMapper;
  90.  
  91. }
  92. }
Add Comment
Please, Sign In to add comment