@@ -176,6 +176,51 @@ public void Map__object_including_child_and_grandchild()
176176 Assert . True ( users . Count == 2 ) ;
177177 }
178178
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+
179224 [ Fact ]
180225 public void Map_object_when_null_values_are_typed ( )
181226 {
@@ -783,6 +828,7 @@ public AccountModel()
783828 public string Description { get ; set ; }
784829 public string Type { get ; set ; }
785830 public DateTime DateCreated { get ; set ; }
831+ public BranchModel Branch { get ; set ; }
786832 public ICollection < ThingModel > ThingModels { get ; set ; }
787833 public ICollection < UserModel > UserModels { get ; set ; }
788834 }
@@ -827,6 +873,12 @@ public class Branch
827873 public string Name { get ; set ; }
828874 }
829875
876+ public class BranchModel
877+ {
878+ public int Id { get ; set ; }
879+ public string Name { get ; set ; }
880+ }
881+
830882 public class UserVM
831883 {
832884 public string Name { get ; set ; }
0 commit comments