Skip to content

Commit 147e12b

Browse files
author
Timothy Mothra
authored
fix remaining MakeGenericType errors (Azure#49663)
1 parent 8839a65 commit 147e12b

File tree

1 file changed

+30
-2
lines changed
  • sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/Internals/Filtering

1 file changed

+30
-2
lines changed

sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/Internals/Filtering/Filter.cs

+30-2
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)