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); }