@@ -48,7 +48,9 @@ public void Bar()
4848 Name = nameof ( Foo ) ;
4949 }
5050
51- public string Name { get ; set ; }
51+ public string ? Name { get ; set ; }
52+
53+ public string ? Description { get ; set ; }
5254
5355 public MyClass Child { get ; set ; }
5456 }
@@ -1683,24 +1685,53 @@ public void DynamicExpressionParser_ParseLambda_StringEquals_WithCombinedConditi
16831685
16841686 // #803
16851687 [ Fact ]
1686- public void DynamicExpressionParser_ParseLambda_StringEquals_WithConstantString ( )
1688+ public void DynamicExpressionParser_ParseLambda_Calling_Equals_On_ConstantString ( )
16871689 {
16881690 // Arrange
16891691 var parameters = new [ ]
16901692 {
16911693 Expression . Parameter ( typeof ( MyClass ) , "myClass" )
16921694 } ;
16931695
1694- var invokerArguments = new List < object >
1696+ var invokerArguments = new object [ ]
16951697 {
16961698 new MyClass { Name = "Foo" }
16971699 } ;
16981700
16991701 // Act
1700- var expression = "Name == \" test\" || \" foo\" .Equals(it.Name, StringComparison.OrdinalIgnoreCase)" ;
1702+ var expression = "Name == \" test\" || Name.ToLower() == \" abc \" or \" foo\" .Equals(it.Name, StringComparison.OrdinalIgnoreCase)" ;
17011703 var lambdaExpression = DynamicExpressionParser . ParseLambda ( parameters , null , expression ) ;
17021704 var del = lambdaExpression . Compile ( ) ;
1703- var result = del . DynamicInvoke ( invokerArguments . ToArray ( ) ) ;
1705+ var result = del . DynamicInvoke ( invokerArguments ) ;
1706+
1707+ // Assert
1708+ result . Should ( ) . Be ( true ) ;
1709+ }
1710+
1711+ // #810
1712+ [ Fact ]
1713+ public void DynamicExpressionParser_ParseLambda_Calling_ToLower_On_String ( )
1714+ {
1715+ // Arrange
1716+ var parameters = new [ ]
1717+ {
1718+ Expression . Parameter ( typeof ( MyClass ) , "myClass" )
1719+ } ;
1720+
1721+ var invokerArguments = new object [ ]
1722+ {
1723+ new MyClass
1724+ {
1725+ Name = "Foo" ,
1726+ Description = "Bar"
1727+ }
1728+ } ;
1729+
1730+ // Act
1731+ var expression = "(Name != null && Convert.ToString(Name).ToLower().Contains(\" foo\" )) or (Description != null && Convert.ToString(Description).ToLower().Contains(\" bar\" ))" ;
1732+ var lambdaExpression = DynamicExpressionParser . ParseLambda ( parameters , null , expression ) ;
1733+ var del = lambdaExpression . Compile ( ) ;
1734+ var result = del . DynamicInvoke ( invokerArguments ) ;
17041735
17051736 // Assert
17061737 result . Should ( ) . Be ( true ) ;
0 commit comments