@@ -467,10 +467,38 @@ private Expression ProduceComparatorExpressionForSingleFieldCondition(Expression
467
467
{
468
468
case Predicate . Equal :
469
469
// fieldValue == enumValue
470
- return Expression . Equal ( fieldExpression , Expression . Constant ( enumValue , isFieldTypeNullable ? typeof ( Nullable < > ) . MakeGenericType ( fieldType ) : fieldType ) ) ;
470
+ if ( isFieldTypeNullable )
471
+ {
472
+ // For nullable enums, we need to use a different approach
473
+ // First, check if the field is null, then check for equality if not null
474
+ // (fieldExpression == null ? false : fieldExpression.Value == enumValue)
475
+ return Expression . Condition (
476
+ Expression . Equal ( fieldExpression , Expression . Constant ( null , fieldExpression . Type ) ) ,
477
+ Expression . Constant ( false ) ,
478
+ Expression . Equal (
479
+ Expression . Convert ( fieldExpression , fieldType ) ,
480
+ Expression . Constant ( enumValue , fieldType ) ) ) ;
481
+ }
482
+ else
483
+ {
484
+ return Expression . Equal ( fieldExpression , Expression . Constant ( enumValue , fieldType ) ) ;
485
+ }
471
486
case Predicate . NotEqual :
472
487
// fieldValue != enumValue
473
- return Expression . NotEqual ( fieldExpression , Expression . Constant ( enumValue , isFieldTypeNullable ? typeof ( Nullable < > ) . MakeGenericType ( fieldType ) : fieldType ) ) ;
488
+ if ( isFieldTypeNullable )
489
+ {
490
+ // For nullable enums: (fieldExpression == null ? true : fieldExpression.Value != enumValue)
491
+ return Expression . Condition (
492
+ Expression . Equal ( fieldExpression , Expression . Constant ( null , fieldExpression . Type ) ) ,
493
+ Expression . Constant ( true ) ,
494
+ Expression . NotEqual (
495
+ Expression . Convert ( fieldExpression , fieldType ) ,
496
+ Expression . Constant ( enumValue , fieldType ) ) ) ;
497
+ }
498
+ else
499
+ {
500
+ return Expression . NotEqual ( fieldExpression , Expression . Constant ( enumValue , fieldType ) ) ;
501
+ }
474
502
case Predicate . LessThan :
475
503
// (int)fieldValue < (int)enumValue
476
504
// (int?)fieldValue < (int?)enumValue
0 commit comments