1- using System . Collections . Generic ;
1+ using System ;
2+ using System . Collections . Generic ;
23using System . Data ;
34using System . Linq ;
45using System . Reflection ;
@@ -19,6 +20,8 @@ public QueryMapper(IDatabaseGateway databaseGateway)
1920
2021 public MappedRow < T > MapRow < T > ( IQuery query ) where T : new ( )
2122 {
23+ Guard . AgainstNull ( query , "query" ) ;
24+
2225 var row = _databaseGateway . GetSingleRowUsing ( query ) ;
2326
2427 return new MappedRow < T > ( row , Map < T > ( row ) ) ;
@@ -52,17 +55,46 @@ public QueryMapper(IDatabaseGateway databaseGateway)
5255
5356 public IEnumerable < MappedRow < T > > MapRows < T > ( IQuery query ) where T : new ( )
5457 {
58+ Guard . AgainstNull ( query , "query" ) ;
59+
5560 return _databaseGateway . GetRowsUsing ( query ) . Select ( row => new MappedRow < T > ( row , Map < T > ( row ) ) ) ;
5661 }
5762
5863 public T MapObject < T > ( IQuery query ) where T : new ( )
5964 {
65+ Guard . AgainstNull ( query , "query" ) ;
66+
6067 return Map < T > ( _databaseGateway . GetSingleRowUsing ( query ) ) ;
6168 }
6269
6370 public IEnumerable < T > MapObjects < T > ( IQuery query ) where T : new ( )
6471 {
72+ Guard . AgainstNull ( query , "query" ) ;
73+
6574 return _databaseGateway . GetRowsUsing ( query ) . Select ( row => Map < T > ( row ) ) ;
6675 }
76+
77+ public T MapValue < T > ( IQuery query )
78+ {
79+ Guard . AgainstNull ( query , "query" ) ;
80+
81+ return MapRowValue < T > ( _databaseGateway . GetSingleRowUsing ( query ) ) ;
82+ }
83+
84+ public IEnumerable < T > MapValues < T > ( IQuery query )
85+ {
86+ Guard . AgainstNull ( query , "query" ) ;
87+
88+ return _databaseGateway . GetRowsUsing ( query ) . Select ( row => MapRowValue < T > ( row ) ) ;
89+ }
90+
91+ private T MapRowValue < T > ( DataRow row )
92+ {
93+ var underlyingSystemType = Nullable . GetUnderlyingType ( typeof ( T ) ) ?? typeof ( T ) ;
94+
95+ return row [ 0 ] == null
96+ ? default ( T )
97+ : ( T ) Convert . ChangeType ( row [ 0 ] , underlyingSystemType ) ;
98+ }
6799 }
68100}
0 commit comments