Represents a DbExpression that has a binary operator.
Inheritance: DbExpression
 /// <summary>
 ///  Creates a <see cref="DbBinaryExpression"/>.
 /// </summary>
 /// <param name="binaryExpressionType">The <see cref="DbBinaryExpressionType"/> that specifies the type of binary expression to create.</param>
 /// <param name="leftExpression">A <see cref="DbExpression"/> that represents the left operand.</param>
 /// <param name="rightExpression">A <see cref="DbExpression"/> that represents the right operand.</param>
 /// <returns>A <see cref="DbBinaryExpression"/> instance.</returns>
 public DbBinaryExpression MakeBinary(DbBinaryExpressionType binaryExpressionType, DbExpression leftExpression, DbExpression rightExpression)
 {
     var binaryExpression = new DbBinaryExpression(binaryExpressionType, leftExpression, rightExpression);
     return binaryExpression;
 }
        /// <summary>
        /// Translates the <paramref name="binaryExpression"/> into a string representation.
        /// </summary>
        /// <param name="binaryExpression">The <see cref="DbBinaryExpression"/> to translate.</param>
        /// <returns><see cref="string"/></returns>
        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);
        }
        /// <summary>
        /// Translates the <paramref name="binaryExpression"/> into a string representation.
        /// </summary>
        /// <param name="binaryExpression">The <see cref="DbBinaryExpression"/> to translate.</param>
        /// <returns><see cref="DbExpression"/></returns>
        protected virtual DbExpression VisitBinaryExpression(DbBinaryExpression binaryExpression)
        {
            var leftExpression = Visit(binaryExpression.LeftExpression);
            var rightExpression = Visit(binaryExpression.RightExpression);
            if (!leftExpression.Equals(binaryExpression.LeftExpression) ||
                rightExpression.Equals(binaryExpression.RightExpression))
            {
                return ExpressionFactory.MakeBinary(binaryExpression.BinaryExpressionType, leftExpression, rightExpression);
            }

            return binaryExpression;
        }