@@ -262,6 +262,11 @@ public static class StaticHelper
262262 {
263263 return Guid . NewGuid ( ) ;
264264 }
265+
266+ public static string Filter ( string filter )
267+ {
268+ return filter ;
269+ }
265270 }
266271
267272 public class TestCustomTypeProvider : AbstractDynamicLinqCustomTypeProvider , IDynamicLinkCustomTypeProvider
@@ -1379,14 +1384,58 @@ public void DynamicExpressionParser_ParseLambda_Operator_Less_Greater_With_Guids
13791384
13801385 // Act
13811386 var lambda = DynamicExpressionParser . ParseLambda ( config , typeof ( User ) , null , expressionText , user ) ;
1382- var guidLambda = lambda as Expression < Func < User , Guid > > ;
1383- Assert . NotNull ( guidLambda ) ;
1387+ var guidLambda = ( Expression < Func < User , Guid > > ) lambda ;
13841388
1385- var del = lambda . Compile ( ) ;
1386- var result = ( Guid ) del . DynamicInvoke ( user ) ;
1389+ var del = guidLambda . Compile ( ) ;
1390+ var result = ( Guid ? ) del . DynamicInvoke ( user ) ;
13871391
13881392 // Assert
1389- Assert . Equal ( anotherId , result ) ;
1393+ result . Should ( ) . Be ( anotherId ) ;
1394+ }
1395+
1396+ [ Fact ]
1397+ public void DynamicExpressionParser_ParseLambda_CustomType_Method_With_ExpressionString ( )
1398+ {
1399+ // Arrange
1400+ var config = new ParsingConfig
1401+ {
1402+ CustomTypeProvider = new TestCustomTypeProvider ( )
1403+ } ;
1404+
1405+ var user = new User ( ) ;
1406+
1407+ // Act : char
1408+ var expressionTextChar = "StaticHelper.Filter(\" C == 'x'\" )" ;
1409+ var lambdaChar = DynamicExpressionParser . ParseLambda ( config , typeof ( User ) , null , expressionTextChar , user ) ;
1410+ var funcChar = ( Expression < Func < User , string > > ) lambdaChar ;
1411+
1412+ var delegateChar = funcChar . Compile ( ) ;
1413+ var resultChar = ( string ? ) delegateChar . DynamicInvoke ( user ) ;
1414+
1415+ // Assert : int
1416+ resultChar . Should ( ) . Be ( "C == 'x'" ) ;
1417+
1418+ // Act : int
1419+ var expressionTextIncome = "StaticHelper.Filter(\" Income == 5\" )" ;
1420+ var lambdaIncome = DynamicExpressionParser . ParseLambda ( config , typeof ( User ) , null , expressionTextIncome , user ) ;
1421+ var funcIncome = ( Expression < Func < User , string > > ) lambdaIncome ;
1422+
1423+ var delegateIncome = funcIncome . Compile ( ) ;
1424+ var resultIncome = ( string ? ) delegateIncome . DynamicInvoke ( user ) ;
1425+
1426+ // Assert : int
1427+ resultIncome . Should ( ) . Be ( "Income == 5" ) ;
1428+
1429+ // Act : string
1430+ var expressionTextUserName = "StaticHelper.Filter(\" UserName == \" \" x\" \" \" )" ;
1431+ var lambdaUserName = DynamicExpressionParser . ParseLambda ( config , typeof ( User ) , null , expressionTextUserName , user ) ;
1432+ var funcUserName = ( Expression < Func < User , string > > ) lambdaUserName ;
1433+
1434+ var delegateUserName = funcUserName . Compile ( ) ;
1435+ var resultUserName = ( string ? ) delegateUserName . DynamicInvoke ( user ) ;
1436+
1437+ // Assert : string
1438+ resultUserName . Should ( ) . Be ( @"UserName == ""x""""""" ) ;
13901439 }
13911440
13921441 [ Theory ]
0 commit comments