@@ -467,10 +467,38 @@ private Expression ProduceComparatorExpressionForSingleFieldCondition(Expression
467467 {
468468 case Predicate . Equal :
469469 // 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+ }
471486 case Predicate . NotEqual :
472487 // 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+ }
474502 case Predicate . LessThan :
475503 // (int)fieldValue < (int)enumValue
476504 // (int?)fieldValue < (int?)enumValue
0 commit comments