private static BinaryExpression CreateRelationalOperator(
            ExpressionType op,
            Expression left,
            Expression right)
        {
            BinaryExpression result;

            LinqExpressionNormalizer.TryCreateRelationalOperator(op, left, right, out result);
            return(result);
        }
 internal override Expression VisitBinary(BinaryExpression b)
 {
     b = (BinaryExpression)base.VisitBinary(b);
     if (b.NodeType == ExpressionType.Equal)
     {
         Expression left  = LinqExpressionNormalizer.UnwrapObjectConvert(b.Left);
         Expression right = LinqExpressionNormalizer.UnwrapObjectConvert(b.Right);
         if (left != b.Left || right != b.Right)
         {
             b = LinqExpressionNormalizer.CreateRelationalOperator(ExpressionType.Equal, left, right);
         }
     }
     LinqExpressionNormalizer.Pattern pattern;
     if (this._patterns.TryGetValue(b.Left, out pattern) && pattern.Kind == LinqExpressionNormalizer.PatternKind.Compare && LinqExpressionNormalizer.IsConstantZero(b.Right))
     {
         LinqExpressionNormalizer.ComparePattern comparePattern = (LinqExpressionNormalizer.ComparePattern)pattern;
         BinaryExpression result;
         if (LinqExpressionNormalizer.TryCreateRelationalOperator(b.NodeType, comparePattern.Left, comparePattern.Right, out result))
         {
             b = result;
         }
     }
     return((Expression)b);
 }