@@ -38,10 +38,17 @@ public class ExpressionTreeBuilderTestClass
38
38
public List < double > DoubleList { get ; set ; }
39
39
public List < string > StrList { get ; set ; }
40
40
public List < ChildClass > ChildClasses { get ; set ; }
41
+ public List < ChildClass > NestedNullObjectChildClasses { get ; set ; }
41
42
42
43
}
43
44
44
45
public class ChildClass
46
+ {
47
+ public string ClassName { get ; set ; }
48
+ public ChildSubClass ChildSubClass { get ; set ; }
49
+ }
50
+
51
+ public class ChildSubClass
45
52
{
46
53
public string ClassName { get ; set ; }
47
54
}
@@ -100,7 +107,17 @@ public static List<ExpressionTreeBuilderTestClass> GetExpressionTreeData()
100
107
StrList = new List < string > ( ) { "Str1" , "Str2" } ,
101
108
DateList = new List < DateTime > ( ) { DateTime . UtcNow . Date , DateTime . UtcNow . Date . AddDays ( - 2 ) } ,
102
109
DoubleList = new List < double > ( ) { 1.48 , 1.84 , 1.33 } ,
103
- IntNullList = new List < int ? > ( ) { 3 , 4 , 5 , null }
110
+ IntNullList = new List < int ? > ( ) { 3 , 4 , 5 , null } ,
111
+ NestedNullObjectChildClasses = new List < ChildClass > ( )
112
+ {
113
+ new ChildClass ( )
114
+ {
115
+ ChildSubClass = new ChildSubClass ( )
116
+ {
117
+ ClassName = "ChildSubClass"
118
+ }
119
+ }
120
+ }
104
121
} ;
105
122
tData . Add ( entry1 ) ;
106
123
@@ -124,7 +141,21 @@ public static List<ExpressionTreeBuilderTestClass> GetExpressionTreeData()
124
141
StrList = new List < string > ( ) { "Str1" , "Str2" } ,
125
142
DateList = new List < DateTime > ( ) { DateTime . UtcNow . Date , DateTime . UtcNow . Date . AddDays ( - 2 ) } ,
126
143
DoubleList = new List < double > ( ) { 1.48 , 1.84 , 1.33 } ,
127
- IntNullList = new List < int ? > ( ) { 3 , 4 , 5 , null }
144
+ IntNullList = new List < int ? > ( ) { 3 , 4 , 5 , null } ,
145
+ NestedNullObjectChildClasses = new List < ChildClass > ( )
146
+ {
147
+ new ChildClass ( )
148
+ {
149
+
150
+ } ,
151
+ new ChildClass ( )
152
+ {
153
+ ChildSubClass = new ChildSubClass ( )
154
+ {
155
+ ClassName = "className"
156
+ }
157
+ }
158
+ }
128
159
} ;
129
160
tData . Add ( entry2 ) ;
130
161
@@ -332,6 +363,34 @@ public void IsNullSubCollection()
332
363
Assert . IsTrue ( contentNullFilteredList . Count == 0 ) ;
333
364
}
334
365
366
+ [ Test ]
367
+ public void IsNullNestedClassInSubCollection ( )
368
+ {
369
+ var startingQuery = GetExpressionTreeData ( ) . AsQueryable ( ) ;
370
+
371
+
372
+ //expect no entries to match
373
+ var contentNullFilter = new QueryBuilderFilterRule
374
+ {
375
+ Condition = "and" ,
376
+ Rules = new List < QueryBuilderFilterRule >
377
+ {
378
+ new QueryBuilderFilterRule
379
+ {
380
+ Condition = "and" ,
381
+ Field = "NestedNullObjectChildClasses.ChildSubClass.ClassName" ,
382
+ Id = "NestedNullObjectChildClasses.ChildSubClass.ClassName" ,
383
+ Input = "NA" ,
384
+ Operator = "equal" ,
385
+ Type = "string" ,
386
+ Value = new [ ] { "books" }
387
+ }
388
+ }
389
+ } ;
390
+ var contentNullFilteredList = startingQuery . BuildQuery < ExpressionTreeBuilderTestClass > ( contentNullFilter ) . ToList ( ) ;
391
+ Assert . IsTrue ( contentNullFilteredList != null ) ;
392
+ Assert . IsTrue ( contentNullFilteredList . Count == 0 ) ;
393
+ }
335
394
336
395
[ Test ]
337
396
public void InClause ( )
0 commit comments