@@ -692,6 +692,35 @@ public void Can_map_expression_when_mapped_properties_have_a_different_generic_a
692692 //Assert
693693 Assert . NotNull ( dest ) ;
694694 }
695+
696+ [ Fact ]
697+ public void Can_map_expression_when_mapped_when_members_parent_is_a_method ( )
698+ {
699+ //Arrange
700+ List < EmployeeEntity > empEntity = new List < EmployeeEntity >
701+ {
702+ new EmployeeEntity { Id = 1 , Name = "Jean-Louis" , Age = 39 , Events = new EventEntity [ ] { new EventEntity { EventType = "Start" , EventDate = DateTime . Today . AddYears ( - 1 ) } } . ToList ( ) } ,
703+ new EmployeeEntity { Id = 2 , Name = "Jean-Paul" , Age = 32 , Events = new EventEntity [ ] { new EventEntity { EventType = "Start" , EventDate = DateTime . Today . AddYears ( - 2 ) } } . ToList ( ) } ,
704+ new EmployeeEntity { Id = 3 , Name = "Jean-Christophe" , Age = 19 , Events = new EventEntity [ ] { new EventEntity { EventType = "Start" , EventDate = DateTime . Today . AddYears ( - 1 ) } } . ToList ( ) } ,
705+ new EmployeeEntity { Id = 4 , Name = "Jean-Marie" , Age = 27 , Events = new EventEntity [ ] { new EventEntity { EventType = "Start" , EventDate = DateTime . Today . AddYears ( - 3 ) } } . ToList ( ) } ,
706+ new EmployeeEntity { Id = 5 , Name = "Jean-Marc" , Age = 22 , Events = new EventEntity [ ] { new EventEntity { EventType = "Start" , EventDate = DateTime . Today . AddYears ( - 5 ) } } . ToList ( ) } ,
707+ new EmployeeEntity { Id = 5 , Name = "Jean-Pierre" , Age = 22 , Events = new EventEntity [ ] { new EventEntity { EventType = "Start" , EventDate = DateTime . Today . AddYears ( - 5 ) } } . ToList ( ) } ,
708+ new EmployeeEntity { Id = 6 , Name = "Christophe" , Age = 55 , Events = new EventEntity [ ] { new EventEntity { EventType = "Start" , EventDate = DateTime . Today . AddYears ( - 1 ) } } . ToList ( ) } ,
709+ new EmployeeEntity { Id = 7 , Name = "Marc" , Age = 23 , Events = new EventEntity [ ] { new EventEntity { EventType = "Start" , EventDate = DateTime . Today . AddYears ( - 2 ) } } . ToList ( ) } ,
710+ new EmployeeEntity { Id = 8 , Name = "Paul" , Age = 38 , Events = new EventEntity [ ] { new EventEntity { EventType = "Start" , EventDate = DateTime . Today . AddYears ( - 10 ) } , new EventEntity { EventType = "Stop" , EventDate = DateTime . Today . AddYears ( - 1 ) } } . ToList ( ) } ,
711+ new EmployeeEntity { Id = 9 , Name = "Jean" , Age = 32 , Events = new EventEntity [ ] { new EventEntity { EventType = "Start" , EventDate = DateTime . Today . AddYears ( - 10 ) } , new EventEntity { EventType = "Stop" , EventDate = DateTime . Today . AddYears ( - 2 ) } } . ToList ( ) } ,
712+ } ;
713+ Expression < Func < EmployeeModel , bool > > filter = emp =>
714+ emp . Events . Any ( e => e . EventType . Equals ( "Stop" ) ) &&
715+ emp . Events . First ( e => e . EventType . Equals ( "Stop" ) ) . EventDate < DateTime . Today . AddYears ( - 1 ) ;
716+
717+ //Act
718+ Expression < Func < EmployeeEntity , bool > > mappedFilter = mapper . MapExpression < Expression < Func < EmployeeEntity , bool > > > ( filter ) ;
719+ List < EmployeeEntity > res = empEntity . AsQueryable ( ) . Where ( mappedFilter ) . ToList ( ) ;
720+
721+ //Assert
722+ Assert . True ( res . Count == 1 ) ;
723+ }
695724 #endregion Tests
696725
697726 private static void SetupAutoMapper ( )
@@ -1096,6 +1125,35 @@ class ListExtension : List<string>
10961125 {
10971126 }
10981127
1128+ internal class EmployeeEntity
1129+ {
1130+ public int Id { get ; set ; }
1131+ public string Name { get ; set ; }
1132+ public int Age { get ; set ; }
1133+ public List < EventEntity > Events { get ; set ; }
1134+ }
1135+
1136+ internal class EventEntity
1137+ {
1138+ public string EventType { get ; set ; }
1139+ public DateTime EventDate { get ; set ; }
1140+ }
1141+
1142+
1143+ internal class EmployeeModel
1144+ {
1145+ public int Id { get ; set ; }
1146+ public string Name { get ; set ; }
1147+ public int Age { get ; set ; }
1148+ public List < EventModel > Events { get ; set ; }
1149+ }
1150+
1151+ internal class EventModel
1152+ {
1153+ public string EventType { get ; set ; }
1154+ public DateTime EventDate { get ; set ; }
1155+ }
1156+
10991157 public class OrganizationProfile : Profile
11001158 {
11011159 public OrganizationProfile ( )
@@ -1198,6 +1256,10 @@ public OrganizationProfile()
11981256 . ForMember ( d => d . Count , opt => opt . MapFrom ( s => s . Count ) ) ;
11991257
12001258 CreateMap < Branch , BranchModel > ( ) ;
1259+
1260+ CreateMap < EmployeeModel , EmployeeEntity > ( ) . ReverseMap ( ) ;
1261+ CreateMap < EventModel , EventEntity > ( ) . ReverseMap ( ) ;
1262+ //CreateMap<EventEntity, EmployeeModel>();
12011263 }
12021264 }
12031265
0 commit comments