@@ -395,14 +395,13 @@ public TEntity Find<TEntity>(IFetchQueryStrategy<TEntity> fetchStrategy, params
395395 fetchStrategy != null ,
396396 out var sql ,
397397 out var parameters ,
398- out var navigationProperties ,
399- out var getPropertyFromColumnAliasCallback ) ;
398+ out var mappingProperties ) ;
400399
401- var mapper = new Mapper < TEntity > ( Conventions , navigationProperties , getPropertyFromColumnAliasCallback ) ;
400+ var mapper = new Mapper < TEntity > ( Conventions , mappingProperties ) ;
402401
403402 ExecuteSchemaValidate ( typeof ( TEntity ) ) ;
404403
405- return _dbHelper . ExecuteObject < TEntity > ( sql , parameters , r => mapper . Map < TEntity > ( r , selectorFunc ) ) ;
404+ return _dbHelper . ExecuteObject < TEntity > ( sql , parameters , r => selectorFunc ( mapper . Map ( r ) ) ) ;
406405 }
407406
408407 /// <summary>
@@ -424,14 +423,13 @@ public TResult Find<TEntity, TResult>(IQueryOptions<TEntity> options, Expression
424423 options ,
425424 out var sql ,
426425 out var parameters ,
427- out var navigationProperties ,
428- out var getPropertyFromColumnAliasCallback ) ;
426+ out var mappingProperties ) ;
429427
430- var mapper = new Mapper < TEntity > ( Conventions , navigationProperties , getPropertyFromColumnAliasCallback ) ;
428+ var mapper = new Mapper < TEntity > ( Conventions , mappingProperties ) ;
431429
432430 ExecuteSchemaValidate ( typeof ( TEntity ) ) ;
433431
434- return _dbHelper . ExecuteObject < TResult > ( sql , parameters , r => mapper . Map < TResult > ( r , selectorFunc ) ) ;
432+ return _dbHelper . ExecuteObject < TResult > ( sql , parameters , r => selectorFunc ( mapper . Map ( r ) ) ) ;
435433 }
436434
437435 /// <summary>
@@ -453,14 +451,42 @@ public IPagedQueryResult<IEnumerable<TResult>> FindAll<TEntity, TResult>(IQueryO
453451 options ,
454452 out var sql ,
455453 out var parameters ,
456- out var navigationProperties ,
457- out var getPropertyFromColumnAliasCallback ) ;
454+ out var mappingProperties ) ;
458455
459- var mapper = new Mapper < TEntity > ( Conventions , navigationProperties , getPropertyFromColumnAliasCallback ) ;
456+ var mapper = new Mapper < TEntity > ( Conventions , mappingProperties ) ;
460457
461458 ExecuteSchemaValidate ( typeof ( TEntity ) ) ;
462459
463- return _dbHelper . ExecuteList < TResult > ( sql , parameters , r => mapper . Map < TResult > ( r , selectorFunc ) ) ;
460+ using ( var reader = _dbHelper . ExecuteReader ( sql , parameters ) )
461+ {
462+ var list = new List < TResult > ( ) ;
463+ var foundCrossJoinCountColumn = false ;
464+ var total = 0 ;
465+
466+ QueryBuilder . ExtractCrossJoinColumnName ( sql , out var crossJoinColumnName ) ;
467+
468+ while ( reader . Read ( ) )
469+ {
470+ for ( var i = 0 ; i < reader . FieldCount ; i ++ )
471+ {
472+ var name = reader . GetName ( i ) ;
473+
474+ if ( ! string . IsNullOrEmpty ( crossJoinColumnName ) && name . Equals ( crossJoinColumnName ) )
475+ {
476+ total = ( int ) reader [ name ] ;
477+ foundCrossJoinCountColumn = true ;
478+ break ;
479+ }
480+ }
481+
482+ list . Add ( selectorFunc ( mapper . Map ( reader ) ) ) ;
483+ }
484+
485+ if ( ! foundCrossJoinCountColumn )
486+ total = list . Count ;
487+
488+ return new PagedQueryResult < IEnumerable < TResult > > ( list , total ) ;
489+ }
464490 }
465491
466492 /// <summary>
@@ -530,10 +556,9 @@ public IPagedQueryResult<Dictionary<TDictionaryKey, TElement>> ToDictionary<TEnt
530556 options ,
531557 out var sql ,
532558 out var parameters ,
533- out var navigationProperties ,
534- out var getPropertyFromColumnAliasCallback ) ;
559+ out var mappingProperties ) ;
535560
536- var mapper = new Mapper < TEntity > ( Conventions , navigationProperties , getPropertyFromColumnAliasCallback ) ;
561+ var mapper = new Mapper < TEntity > ( Conventions , mappingProperties ) ;
537562
538563 ExecuteSchemaValidate ( typeof ( TEntity ) ) ;
539564
@@ -559,7 +584,9 @@ public IPagedQueryResult<Dictionary<TDictionaryKey, TElement>> ToDictionary<TEnt
559584 }
560585 }
561586
562- dict . Add ( mapper . Map < TDictionaryKey > ( reader , keySelectFunc ) , mapper . Map < TElement > ( reader , elementSelectorFunc ) ) ;
587+ var mapped = mapper . Map ( reader ) ;
588+
589+ dict . Add ( keySelectFunc ( mapped ) , elementSelectorFunc ( mapped ) ) ;
563590 }
564591
565592 if ( ! foundCrossJoinCountColumn )
@@ -740,14 +767,13 @@ public async Task<TEntity> FindAsync<TEntity>(CancellationToken cancellationToke
740767 fetchStrategy != null ,
741768 out var sql ,
742769 out var parameters ,
743- out var navigationProperties ,
744- out var getPropertyFromColumnAliasCallback ) ;
770+ out var mappingProperties ) ;
745771
746- var mapper = new Mapper < TEntity > ( Conventions , navigationProperties , getPropertyFromColumnAliasCallback ) ;
772+ var mapper = new Mapper < TEntity > ( Conventions , mappingProperties ) ;
747773
748774 await ExecuteSchemaValidateAsync ( typeof ( TEntity ) , cancellationToken ) ;
749775
750- return await _dbHelper . ExecuteObjectAsync < TEntity > ( sql , parameters , r => mapper . Map < TEntity > ( r , selectorFunc ) , cancellationToken ) ;
776+ return await _dbHelper . ExecuteObjectAsync < TEntity > ( sql , parameters , r => selectorFunc ( mapper . Map ( r ) ) , cancellationToken ) ;
751777 }
752778
753779 /// <summary>
@@ -770,14 +796,13 @@ public async Task<TEntity> FindAsync<TEntity>(CancellationToken cancellationToke
770796 options ,
771797 out var sql ,
772798 out var parameters ,
773- out var navigationProperties ,
774- out var getPropertyFromColumnAliasCallback ) ;
799+ out var mappingProperties ) ;
775800
776- var mapper = new Mapper < TEntity > ( Conventions , navigationProperties , getPropertyFromColumnAliasCallback ) ;
801+ var mapper = new Mapper < TEntity > ( Conventions , mappingProperties ) ;
777802
778803 await ExecuteSchemaValidateAsync ( typeof ( TEntity ) , cancellationToken ) ;
779804
780- return await _dbHelper . ExecuteObjectAsync < TResult > ( sql , parameters , r => mapper . Map < TResult > ( r , selectorFunc ) , cancellationToken ) ;
805+ return await _dbHelper . ExecuteObjectAsync < TResult > ( sql , parameters , r => selectorFunc ( mapper . Map ( r ) ) , cancellationToken ) ;
781806 }
782807
783808 /// <summary>
@@ -800,14 +825,42 @@ public async Task<TEntity> FindAsync<TEntity>(CancellationToken cancellationToke
800825 options ,
801826 out var sql ,
802827 out var parameters ,
803- out var navigationProperties ,
804- out var getPropertyFromColumnAliasCallback ) ;
828+ out var mappingProperties ) ;
805829
806- var mapper = new Mapper < TEntity > ( Conventions , navigationProperties , getPropertyFromColumnAliasCallback ) ;
830+ var mapper = new Mapper < TEntity > ( Conventions , mappingProperties ) ;
807831
808832 await ExecuteSchemaValidateAsync ( typeof ( TEntity ) , cancellationToken ) ;
809833
810- return await _dbHelper . ExecuteListAsync < TResult > ( sql , parameters , r => mapper . Map < TResult > ( r , selectorFunc ) , cancellationToken ) ;
834+ using ( var reader = await _dbHelper . ExecuteReaderAsync ( sql , parameters , cancellationToken ) )
835+ {
836+ var list = new List < TResult > ( ) ;
837+ var foundCrossJoinCountColumn = false ;
838+ var total = 0 ;
839+
840+ QueryBuilder . ExtractCrossJoinColumnName ( sql , out var crossJoinColumnName ) ;
841+
842+ while ( await reader . ReadAsync ( cancellationToken ) )
843+ {
844+ for ( var i = 0 ; i < reader . FieldCount ; i ++ )
845+ {
846+ var name = reader . GetName ( i ) ;
847+
848+ if ( ! string . IsNullOrEmpty ( crossJoinColumnName ) && name . Equals ( crossJoinColumnName ) )
849+ {
850+ total = ( int ) reader [ name ] ;
851+ foundCrossJoinCountColumn = true ;
852+ break ;
853+ }
854+ }
855+
856+ list . Add ( selectorFunc ( mapper . Map ( reader ) ) ) ;
857+ }
858+
859+ if ( ! foundCrossJoinCountColumn )
860+ total = list . Count ;
861+
862+ return new PagedQueryResult < IEnumerable < TResult > > ( list , total ) ;
863+ }
811864 }
812865
813866 /// <summary>
@@ -880,10 +933,9 @@ public async Task<TEntity> FindAsync<TEntity>(CancellationToken cancellationToke
880933 options ,
881934 out var sql ,
882935 out var parameters ,
883- out var navigationProperties ,
884- out var getPropertyFromColumnAliasCallback ) ;
936+ out var mappingProperties ) ;
885937
886- var mapper = new Mapper < TEntity > ( Conventions , navigationProperties , getPropertyFromColumnAliasCallback ) ;
938+ var mapper = new Mapper < TEntity > ( Conventions , mappingProperties ) ;
887939
888940 await ExecuteSchemaValidateAsync ( typeof ( TEntity ) , cancellationToken ) ;
889941
@@ -909,7 +961,9 @@ public async Task<TEntity> FindAsync<TEntity>(CancellationToken cancellationToke
909961 }
910962 }
911963
912- dict . Add ( mapper . Map < TDictionaryKey > ( reader , keySelectFunc ) , mapper . Map < TElement > ( reader , elementSelectorFunc ) ) ;
964+ var mapped = mapper . Map ( reader ) ;
965+
966+ dict . Add ( keySelectFunc ( mapped ) , elementSelectorFunc ( mapped ) ) ;
913967 }
914968
915969 if ( ! foundCrossJoinCountColumn )
0 commit comments