DbExpressions.SQLiteQueryTranslator.VisitBinaryExpression C# (CSharp) Method

VisitBinaryExpression() protected method

Translates the binaryExpression into a string representation.
protected VisitBinaryExpression ( DbBinaryExpression binaryExpression ) : DbExpression
binaryExpression DbBinaryExpression The to translate.
return DbExpression
        protected override DbExpression VisitBinaryExpression(DbBinaryExpression binaryExpression)
        {
            var body = "({0}{1}{2})";
            if (binaryExpression.BinaryExpressionType == DbBinaryExpressionType.Assignment)
            {
                body = "{0} = {1}";
                return
                    ExpressionFactory.Sql(string.Format(body, Visit(binaryExpression.LeftExpression),
                                                        Visit(binaryExpression.RightExpression)));
            }

            var leftExpression = Visit(binaryExpression.LeftExpression);
            var rightExpression = Visit(binaryExpression.RightExpression);

            if (binaryExpression.RightExpression.ExpressionType == DbExpressionType.Constant && ((DbConstantExpression)binaryExpression.RightExpression).Value == null)
            {
                if (binaryExpression.BinaryExpressionType == DbBinaryExpressionType.Equal)
                    return ExpressionFactory.Sql(string.Format("({0} IS {1})", leftExpression, rightExpression));
                if (binaryExpression.BinaryExpressionType == DbBinaryExpressionType.NotEqual)
                    return ExpressionFactory.Sql(string.Format("({0} IS NOT {1})", leftExpression, rightExpression));
            }

            if (binaryExpression.LeftExpression.ExpressionType == DbExpressionType.Constant && ((DbConstantExpression)binaryExpression.LeftExpression).Value == null)
            {
                if (binaryExpression.BinaryExpressionType == DbBinaryExpressionType.Equal)
                    return ExpressionFactory.Sql(string.Format("({0} IS {1})", rightExpression, leftExpression));
                if (binaryExpression.BinaryExpressionType == DbBinaryExpressionType.NotEqual)
                    return ExpressionFactory.Sql(string.Format("({0} IS NOT {1})", rightExpression, leftExpression));
            }

            var sqlFragment = string.Format(body, leftExpression,
                 GetBinaryOperator(binaryExpression.BinaryExpressionType),
                                  rightExpression);
            return ExpressionFactory.Sql(sqlFragment);
        }