@@ -279,7 +279,7 @@ public Type ResolveTypeBySimpleName(string typeName)
279
279
}
280
280
281
281
[ Fact ]
282
- public void DynamicExpressionParser_ParseLambda_UseParameterizedNamesInDynamicQuery_false ( )
282
+ public void DynamicExpressionParser_ParseLambda_UseParameterizedNamesInDynamicQuery_false_String ( )
283
283
{
284
284
// Assign
285
285
var config = new ParsingConfig
@@ -291,14 +291,33 @@ public void DynamicExpressionParser_ParseLambda_UseParameterizedNamesInDynamicQu
291
291
var expression = DynamicExpressionParser . ParseLambda < string , bool > ( config , true , "s => s == \" x\" " ) ;
292
292
293
293
// Assert
294
- dynamic constantExpression = ( ConstantExpression ) ( expression . Body as BinaryExpression ) . Right ;
295
- string value = constantExpression . Value ;
294
+ ConstantExpression constantExpression = ( ConstantExpression ) ( ( BinaryExpression ) expression . Body ) . Right ;
295
+ object value = constantExpression . Value ;
296
296
297
297
Check . That ( value ) . IsEqualTo ( "x" ) ;
298
298
}
299
299
300
300
[ Fact ]
301
- public void DynamicExpressionParser_ParseLambda_UseParameterizedNamesInDynamicQuery_true ( )
301
+ public void DynamicExpressionParser_ParseLambda_UseParameterizedNamesInDynamicQuery_false_DateTime ( )
302
+ {
303
+ // Assign
304
+ var config = new ParsingConfig
305
+ {
306
+ UseParameterizedNamesInDynamicQuery = false
307
+ } ;
308
+
309
+ // Act
310
+ var expression = DynamicExpressionParser . ParseLambda < Person , bool > ( config , true , "D == \" 2022-03-02\" " ) ;
311
+
312
+ // Assert
313
+ ConstantExpression constantExpression = ( ConstantExpression ) ( ( BinaryExpression ) expression . Body ) . Right ;
314
+ object value = constantExpression . Value ;
315
+
316
+ Check . That ( value ) . IsEqualTo ( new DateTime ( 2022 , 3 , 2 ) ) ;
317
+ }
318
+
319
+ [ Fact ]
320
+ public void DynamicExpressionParser_ParseLambda_UseParameterizedNamesInDynamicQuery_true_Int ( )
302
321
{
303
322
// Assign
304
323
var config = new ParsingConfig
@@ -311,17 +330,42 @@ public void DynamicExpressionParser_ParseLambda_UseParameterizedNamesInDynamicQu
311
330
var expressionAsString = expression . ToString ( ) ;
312
331
313
332
// Assert
314
- Check . That ( expressionAsString ) . IsEqualTo ( "Param_0 => (Param_0.Id == value(System.Linq.Dynamic.Core.Parser.WrappedValue`1[System.Int32]).Value)" ) ;
333
+ expressionAsString . Should ( ) . Be ( "Param_0 => (Param_0.Id == value(System.Linq.Dynamic.Core.Parser.WrappedValue`1[System.Int32]).Value)" ) ;
315
334
316
- dynamic constantExpression = ( ( MemberExpression ) ( expression . Body as BinaryExpression ) . Right ) . Expression as ConstantExpression ;
317
- var wrappedObj = constantExpression . Value ;
335
+ ConstantExpression constantExpression = ( ConstantExpression ) ( ( MemberExpression ) ( ( BinaryExpression ) expression . Body ) . Right ) . Expression ;
336
+ var wrappedObj = constantExpression ! . Value ;
318
337
319
- var propertyInfo = wrappedObj . GetType ( ) . GetProperty ( "Value" , BindingFlags . Instance | BindingFlags . Public ) ;
320
- var value = ( int ) propertyInfo . GetValue ( wrappedObj ) ;
338
+ PropertyInfo propertyInfo = wrappedObj ! . GetType ( ) . GetProperty ( "Value" , BindingFlags . Instance | BindingFlags . Public ) ;
339
+ object value = propertyInfo ! . GetValue ( wrappedObj ) ;
321
340
322
341
Check . That ( value ) . IsEqualTo ( 42 ) ;
323
342
}
324
343
344
+ [ Fact ( Skip = "Issue 645" ) ]
345
+ public void DynamicExpressionParser_ParseLambda_UseParameterizedNamesInDynamicQuery_true_DateTime ( )
346
+ {
347
+ // Assign
348
+ var config = new ParsingConfig
349
+ {
350
+ UseParameterizedNamesInDynamicQuery = true
351
+ } ;
352
+
353
+ // Act
354
+ var expression = DynamicExpressionParser . ParseLambda < Person , bool > ( config , false , "D = \" 2022-11-16\" " ) ;
355
+ var expressionAsString = expression . ToString ( ) ;
356
+
357
+ // Assert
358
+ expressionAsString . Should ( ) . Be ( "Param_0 => (Param_0.D == value(System.Linq.Dynamic.Core.Parser.WrappedValue`1[System.DateTime]).Value)" ) ;
359
+
360
+ ConstantExpression constantExpression = ( ConstantExpression ) ( ( MemberExpression ) ( ( BinaryExpression ) expression . Body ) . Right ) . Expression ;
361
+ var wrappedObj = constantExpression ! . Value ;
362
+
363
+ PropertyInfo propertyInfo = wrappedObj ! . GetType ( ) . GetProperty ( "Value" , BindingFlags . Instance | BindingFlags . Public ) ;
364
+ object value = propertyInfo ! . GetValue ( wrappedObj ) ;
365
+
366
+ Check . That ( value ) . IsEqualTo ( new DateTime ( 2022 , 11 , 16 ) ) ;
367
+ }
368
+
325
369
[ Theory ]
326
370
[ InlineData ( "NullableIntValue" , "42" ) ]
327
371
[ InlineData ( "NullableDoubleValue" , "42.23" ) ]
@@ -1013,6 +1057,29 @@ public void DynamicExpressionParser_ParseLambda_With_Null_Equals_Guid()
1013
1057
Assert . True ( result ) ;
1014
1058
}
1015
1059
1060
+ [ Fact ]
1061
+ public void DynamicExpressionParser_ParseLambda_With_DateTime_Equals_String ( )
1062
+ {
1063
+ // Arrange
1064
+ var someDateTime = "2022-03-02" ;
1065
+ var user = new Person
1066
+ {
1067
+ D = new DateTime ( 2022 , 3 , 2 )
1068
+ } ;
1069
+ var expressionText = $ "D == \" { someDateTime } \" ";
1070
+
1071
+ // Act
1072
+ var lambda = DynamicExpressionParser . ParseLambda ( typeof ( Person ) , null , expressionText , user ) ;
1073
+ var dtLambda = lambda as Expression < Func < Person , bool > > ;
1074
+ Assert . NotNull ( dtLambda ) ;
1075
+
1076
+ var del = lambda . Compile ( ) ;
1077
+ var result = ( bool ) del . DynamicInvoke ( user ) ;
1078
+
1079
+ // Assert
1080
+ Assert . True ( result ) ;
1081
+ }
1082
+
1016
1083
[ Fact ]
1017
1084
public void DynamicExpressionParser_ParseLambda_With_Guid_Equals_String ( )
1018
1085
{
0 commit comments