Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 internal virtual Expression VisitComparison(BinaryExpression expression)
 {
     return(this.VisitBinary(EntityExpressionVisitor.RemoveUnnecessaryConverts(expression)));
 }