@@ -176,6 +176,51 @@ public void Map__object_including_child_and_grandchild()
176
176
Assert . True ( users . Count == 2 ) ;
177
177
}
178
178
179
+ [ Fact ]
180
+ public void Map__object_including_child_and_grandchild_with_conditional_filter ( )
181
+ {
182
+ //Arrange
183
+ ParameterExpression userParam = Expression . Parameter ( typeof ( UserModel ) , "s" ) ;
184
+ MemberExpression accountModelProperty = Expression . MakeMemberAccess ( userParam , PrimitiveHelper . GetFieldOrProperty ( typeof ( UserModel ) , "AccountModel" ) ) ;
185
+ MemberExpression branchModelProperty = Expression . MakeMemberAccess ( accountModelProperty , PrimitiveHelper . GetFieldOrProperty ( typeof ( AccountModel ) , "Branch" ) ) ;
186
+ MemberExpression nameProperty = Expression . MakeMemberAccess ( branchModelProperty , PrimitiveHelper . GetFieldOrProperty ( typeof ( BranchModel ) , "Name" ) ) ;
187
+
188
+ //{s => (IIF((IIF((s.AccountModel == null), null, s.AccountModel.Branch) == null), null, s.AccountModel.Branch.Name) == "Leeds")}
189
+ Expression < Func < UserModel , bool > > selection = Expression . Lambda < Func < UserModel , bool > >
190
+ (
191
+ Expression . Equal
192
+ (
193
+ Expression . Condition
194
+ (
195
+ Expression . Equal
196
+ (
197
+ Expression . Condition
198
+ (
199
+ Expression . Equal
200
+ (
201
+ accountModelProperty ,
202
+ Expression . Constant ( null , typeof ( AccountModel ) )
203
+ ) ,
204
+ Expression . Constant ( null , typeof ( BranchModel ) ) ,
205
+ branchModelProperty
206
+ ) ,
207
+ Expression . Constant ( null , typeof ( BranchModel ) )
208
+ ) ,
209
+ Expression . Constant ( null , typeof ( string ) ) ,
210
+ nameProperty
211
+ ) ,
212
+ Expression . Constant ( "Park Row" , typeof ( string ) )
213
+ ) ,
214
+ userParam
215
+ ) ;
216
+
217
+ Expression < Func < User , bool > > selectionMapped = mapper . Map < Expression < Func < User , bool > > > ( selection ) ;
218
+ List < User > users = Users . Where ( selectionMapped ) . ToList ( ) ;
219
+
220
+ //Assert
221
+ Assert . True ( users . Count == 1 ) ;
222
+ }
223
+
179
224
[ Fact ]
180
225
public void Map_object_when_null_values_are_typed ( )
181
226
{
@@ -783,6 +828,7 @@ public AccountModel()
783
828
public string Description { get ; set ; }
784
829
public string Type { get ; set ; }
785
830
public DateTime DateCreated { get ; set ; }
831
+ public BranchModel Branch { get ; set ; }
786
832
public ICollection < ThingModel > ThingModels { get ; set ; }
787
833
public ICollection < UserModel > UserModels { get ; set ; }
788
834
}
@@ -827,6 +873,12 @@ public class Branch
827
873
public string Name { get ; set ; }
828
874
}
829
875
876
+ public class BranchModel
877
+ {
878
+ public int Id { get ; set ; }
879
+ public string Name { get ; set ; }
880
+ }
881
+
830
882
public class UserVM
831
883
{
832
884
public string Name { get ; set ; }
0 commit comments