@@ -42,6 +42,35 @@ public void When_Apply_Where_Clause_Over_Queryable_As_Data_Source()
4242 result . ShouldAllBe ( expOverDTO ) ;
4343 }
4444
45+ [ Fact ]
46+ public void Should_Map_From_Generic_Type ( )
47+ {
48+ // Arrange
49+ var mapper = CreateMapper ( ) ;
50+
51+ var models = new List < GenericModel < bool > > ( )
52+ {
53+ new GenericModel < bool > { ABoolean = true } ,
54+ new GenericModel < bool > { ABoolean = false } ,
55+ new GenericModel < bool > { ABoolean = true } ,
56+ new GenericModel < bool > { ABoolean = false }
57+ } ;
58+
59+ var queryable = models . AsQueryable ( ) ;
60+
61+ Expression < Func < DTO , bool > > expOverDTO = ( dto ) => dto . Nested . AnotherBoolean ;
62+
63+ // Act
64+ var q = queryable . UseAsDataSource ( mapper ) . For < DTO > ( ) . Where ( expOverDTO ) ;
65+
66+ var result = q . ToList ( ) ;
67+
68+ // Assert
69+ result . ShouldNotBeNull ( ) ;
70+ result . Count . ShouldBe ( 2 ) ;
71+ result . ShouldAllBe ( expOverDTO ) ;
72+ }
73+
4574 private static IMapper CreateMapper ( )
4675 {
4776 var mapperConfig = new MapperConfiguration ( cfg =>
@@ -52,7 +81,10 @@ private static IMapper CreateMapper()
5281 . ForMember ( d => d . AnotherBoolean , opt => opt . MapFrom ( s => s . ABoolean ) ) ;
5382 cfg . CreateMap < DTO , Model > ( )
5483 . ForMember ( d => d . ABoolean , opt => opt . MapFrom ( s => s . Nested . AnotherBoolean ) ) ;
55-
84+ cfg . CreateMap < GenericModel < bool > , DTO > ( )
85+ . ForMember ( d => d . Nested , opt => opt . MapFrom ( s => s ) ) ;
86+ cfg . CreateMap < GenericModel < bool > , DTO . DTONested > ( )
87+ . ForMember ( d => d . AnotherBoolean , opt => opt . MapFrom ( s => s . ABoolean ) ) ;
5688 } ) ;
5789
5890 var mapper = mapperConfig . CreateMapper ( ) ;
@@ -73,5 +105,11 @@ private class Model
73105 {
74106 public bool ABoolean { get ; set ; }
75107 }
108+
109+
110+ private class GenericModel < T >
111+ {
112+ public T ABoolean { get ; set ; }
113+ }
76114 }
77115}
0 commit comments