@@ -47,30 +47,29 @@ public static void BuildFilter(IndexInfo index)
4747 protected override Expression VisitBinary ( BinaryExpression b )
4848 {
4949 if ( EnumRewritableOperations ( b ) ) {
50- if ( b . Left . StripCasts ( ) . Type . StripNullable ( ) . IsEnum
51- && b . Right . StripCasts ( ) . NodeType == ExpressionType . Constant ) {
50+ var rawLeft = b . Left . StripCasts ( ) ;
51+ var rawLeftType = rawLeft . Type . StripNullable ( ) ;
52+ var rawRight = b . Right . StripCasts ( ) ;
53+ var rawRightType = rawRight . Type . StripNullable ( ) ;
5254
53- var rawEnum = b . Left . StripCasts ( ) ;
54- var typeToCast = ( rawEnum . Type . IsNullable ( ) )
55- ? rawEnum . Type . StripNullable ( ) . GetEnumUnderlyingType ( ) . ToNullable ( )
56- : rawEnum . Type . GetEnumUnderlyingType ( ) ;
55+ if ( rawLeftType . IsEnum && rawRight . NodeType == ExpressionType . Constant ) {
56+ var typeToCast = rawLeft . Type . IsNullable ( )
57+ ? rawLeftType . GetEnumUnderlyingType ( ) . ToNullable ( )
58+ : rawLeft . Type . GetEnumUnderlyingType ( ) ;
5759
5860 return base . VisitBinary ( Expression . MakeBinary (
5961 b . NodeType ,
60- Expression . Convert ( rawEnum , typeToCast ) ,
62+ Expression . Convert ( rawLeft , typeToCast ) ,
6163 Expression . Convert ( b . Right , typeToCast ) ) ) ;
6264 }
63- else if ( b . Right . StripCasts ( ) . Type . StripNullable ( ) . IsEnum
64- && b . Left . StripCasts ( ) . NodeType == ExpressionType . Constant ) {
65-
66- var rawEnum = b . Right . StripCasts ( ) ;
67- var typeToCast = ( rawEnum . Type . IsNullable ( ) )
68- ? rawEnum . Type . StripNullable ( ) . GetEnumUnderlyingType ( ) . ToNullable ( )
69- : rawEnum . Type . GetEnumUnderlyingType ( ) ;
65+ else if ( rawRightType . IsEnum && rawLeft . NodeType == ExpressionType . Constant ) {
66+ var typeToCast = rawRight . Type . IsNullable ( )
67+ ? rawRightType . GetEnumUnderlyingType ( ) . ToNullable ( )
68+ : rawRight . Type . GetEnumUnderlyingType ( ) ;
7069
7170 return base . VisitBinary ( Expression . MakeBinary (
7271 b . NodeType ,
73- Expression . Convert ( rawEnum , typeToCast ) ,
72+ Expression . Convert ( rawRight , typeToCast ) ,
7473 Expression . Convert ( b . Left , typeToCast ) ) ) ;
7574 }
7675 }
@@ -92,9 +91,10 @@ protected override Expression VisitBinary(BinaryExpression b)
9291
9392 static bool EnumRewritableOperations ( BinaryExpression b )
9493 {
95- return b . NodeType . In ( ExpressionType . Equal , ExpressionType . NotEqual ,
96- ExpressionType . GreaterThan , ExpressionType . GreaterThanOrEqual ,
97- ExpressionType . LessThan , ExpressionType . LessThanOrEqual ) ;
94+ var nt = b . NodeType ;
95+ return nt == ExpressionType . Equal || nt == ExpressionType . NotEqual
96+ || nt == ExpressionType . GreaterThan || nt == ExpressionType . GreaterThanOrEqual
97+ || nt == ExpressionType . LessThan || nt == ExpressionType . LessThanOrEqual ;
9898 }
9999 }
100100
0 commit comments