@@ -73,10 +73,10 @@ public static class ValueAccessingStrategy
7373 {
7474 var members = source . Type . GetFieldsAndProperties ( true ) ;
7575 var strategy = arg . Settings . NameMatchingStrategy ;
76- var destinationMemberName = destinationMember . GetMemberName ( arg . Settings . GetMemberNames , strategy . DestinationMemberNameConverter ) ;
76+ var destinationMemberName = destinationMember . GetMemberName ( MemberSide . Destination , arg . Settings . GetMemberNames , strategy . DestinationMemberNameConverter ) ;
7777 return members
7878 . Where ( member => member . ShouldMapMember ( arg , MemberSide . Source ) )
79- . Where ( member => member . GetMemberName ( arg . Settings . GetMemberNames , strategy . SourceMemberNameConverter ) == destinationMemberName )
79+ . Where ( member => member . GetMemberName ( MemberSide . Source , arg . Settings . GetMemberNames , strategy . SourceMemberNameConverter ) == destinationMemberName )
8080 . Select ( member => member . GetExpression ( source ) )
8181 . FirstOrDefault ( ) ;
8282 }
@@ -86,7 +86,7 @@ public static class ValueAccessingStrategy
8686 if ( arg . MapType == MapType . Projection )
8787 return null ;
8888 var strategy = arg . Settings . NameMatchingStrategy ;
89- var destinationMemberName = "Get" + destinationMember . GetMemberName ( arg . Settings . GetMemberNames , strategy . DestinationMemberNameConverter ) ;
89+ var destinationMemberName = "Get" + destinationMember . GetMemberName ( MemberSide . Destination , arg . Settings . GetMemberNames , strategy . DestinationMemberNameConverter ) ;
9090 var getMethod = Array . Find ( source . Type . GetMethods ( BindingFlags . Public | BindingFlags . Instance ) , m => strategy . SourceMemberNameConverter ( m . Name ) == destinationMemberName && m . GetParameters ( ) . Length == 0 ) ;
9191 if ( getMethod == null )
9292 return null ;
@@ -98,7 +98,7 @@ public static class ValueAccessingStrategy
9898 private static Expression ? FlattenMemberFn ( Expression source , IMemberModel destinationMember , CompileArgument arg )
9999 {
100100 var strategy = arg . Settings . NameMatchingStrategy ;
101- var destinationMemberName = destinationMember . GetMemberName ( arg . Settings . GetMemberNames , strategy . DestinationMemberNameConverter ) ;
101+ var destinationMemberName = destinationMember . GetMemberName ( MemberSide . Destination , arg . Settings . GetMemberNames , strategy . DestinationMemberNameConverter ) ;
102102 return GetDeepFlattening ( source , destinationMemberName , arg ) ;
103103 }
104104
@@ -110,7 +110,11 @@ public static class ValueAccessingStrategy
110110 {
111111 if ( ! member . ShouldMapMember ( arg , MemberSide . Source ) )
112112 continue ;
113- var sourceMemberName = member . GetMemberName ( arg . Settings . GetMemberNames , strategy . SourceMemberNameConverter ) ;
113+
114+ var sourceMemberName = member . GetMemberName ( MemberSide . Source , arg . Settings . GetMemberNames , strategy . SourceMemberNameConverter ) ;
115+ if ( string . Equals ( propertyName , sourceMemberName ) )
116+ return member . GetExpression ( source ) ;
117+
114118 var propertyType = member . Type ;
115119 if ( propertyName . StartsWith ( sourceMemberName ) &&
116120 ( propertyType . IsPoco ( ) || propertyType . IsRecordType ( ) ) )
@@ -121,24 +125,21 @@ public static class ValueAccessingStrategy
121125 continue ;
122126 return ifTrue ;
123127 }
124-
125- if ( string . Equals ( propertyName , sourceMemberName ) )
126- return member . GetExpression ( source ) ;
127128 }
128129 return null ;
129130 }
130131
131132 internal static IEnumerable < InvokerModel > FindUnflatteningPairs ( Expression source , IMemberModel destinationMember , CompileArgument arg )
132133 {
133134 var strategy = arg . Settings . NameMatchingStrategy ;
134- var destinationMemberName = destinationMember . GetMemberName ( arg . Settings . GetMemberNames , strategy . DestinationMemberNameConverter ) ;
135+ var destinationMemberName = destinationMember . GetMemberName ( MemberSide . Destination , arg . Settings . GetMemberNames , strategy . DestinationMemberNameConverter ) ;
135136 var members = source . Type . GetFieldsAndProperties ( true ) ;
136137
137138 foreach ( var member in members )
138139 {
139140 if ( ! member . ShouldMapMember ( arg , MemberSide . Source ) )
140141 continue ;
141- var sourceMemberName = member . GetMemberName ( arg . Settings . GetMemberNames , strategy . SourceMemberNameConverter ) ;
142+ var sourceMemberName = member . GetMemberName ( MemberSide . Source , arg . Settings . GetMemberNames , strategy . SourceMemberNameConverter ) ;
142143 if ( ! sourceMemberName . StartsWith ( destinationMemberName ) || sourceMemberName == destinationMemberName )
143144 continue ;
144145 foreach ( var prop in GetDeepUnflattening ( destinationMember , sourceMemberName . Substring ( destinationMemberName . Length ) . TrimStart ( '_' ) , arg ) )
@@ -160,20 +161,20 @@ private static IEnumerable<string> GetDeepUnflattening(IMemberModel destinationM
160161 {
161162 if ( ! member . ShouldMapMember ( arg , MemberSide . Destination ) )
162163 continue ;
163- var destMemberName = member . GetMemberName ( arg . Settings . GetMemberNames , strategy . DestinationMemberNameConverter ) ;
164+ var destMemberName = member . GetMemberName ( MemberSide . Destination , arg . Settings . GetMemberNames , strategy . DestinationMemberNameConverter ) ;
164165 var propertyType = member . Type ;
165- if ( propertyName . StartsWith ( destMemberName ) &&
166+ if ( string . Equals ( propertyName , destMemberName ) )
167+ {
168+ yield return member . Name ;
169+ }
170+ else if ( propertyName . StartsWith ( destMemberName ) &&
166171 ( propertyType . IsPoco ( ) || propertyType . IsRecordType ( ) ) )
167172 {
168173 foreach ( var prop in GetDeepUnflattening ( member , propertyName . Substring ( destMemberName . Length ) . TrimStart ( '_' ) , arg ) )
169174 {
170175 yield return member . Name + "." + prop ;
171176 }
172177 }
173- else if ( string . Equals ( propertyName , destMemberName ) )
174- {
175- yield return member . Name ;
176- }
177178 }
178179 }
179180
@@ -184,7 +185,7 @@ private static IEnumerable<string> GetDeepUnflattening(IMemberModel destinationM
184185 return null ;
185186
186187 var strategy = arg . Settings . NameMatchingStrategy ;
187- var destinationMemberName = destinationMember . GetMemberName ( arg . Settings . GetMemberNames , strategy . DestinationMemberNameConverter ) ;
188+ var destinationMemberName = destinationMember . GetMemberName ( MemberSide . Destination , arg . Settings . GetMemberNames , strategy . DestinationMemberNameConverter ) ;
188189 var key = Expression . Constant ( destinationMemberName ) ;
189190 var args = dictType . GetGenericArguments ( ) ;
190191 if ( strategy . SourceMemberNameConverter != MapsterHelper . Identity )
0 commit comments