private static BinaryExpression RemoveUnnecessaryConverts( BinaryExpression expression) { if (expression.Method != (MethodInfo)null || expression.Left.Type != expression.Right.Type) { return(expression); } switch (expression.Left.NodeType) { case ExpressionType.Constant: ConstantExpression left1 = (ConstantExpression)expression.Left; if (expression.Right.NodeType == ExpressionType.Convert) { UnaryExpression right = (UnaryExpression)expression.Right; if (EntityExpressionVisitor.TryConvertConstant(ref left1, right.Operand.Type)) { return(EntityExpressionVisitor.MakeBinaryExpression(expression.NodeType, (Expression)left1, right.Operand)); } break; } break; case ExpressionType.Convert: UnaryExpression left2 = (UnaryExpression)expression.Left; switch (expression.Right.NodeType) { case ExpressionType.Constant: ConstantExpression right1 = (ConstantExpression)expression.Right; if (EntityExpressionVisitor.TryConvertConstant(ref right1, left2.Operand.Type)) { return(EntityExpressionVisitor.MakeBinaryExpression(expression.NodeType, left2.Operand, (Expression)right1)); } break; case ExpressionType.Convert: UnaryExpression right2 = (UnaryExpression)expression.Right; if (EntityExpressionVisitor.CanRemoveConverts(left2, right2)) { return(EntityExpressionVisitor.MakeBinaryExpression(expression.NodeType, left2.Operand, right2.Operand)); } break; } } return(expression); }
internal virtual Expression VisitComparison(BinaryExpression expression) { return(this.VisitBinary(EntityExpressionVisitor.RemoveUnnecessaryConverts(expression))); }