public SqlExpression MakeStringEqualsExpression(
     [NotNull] SqlExpression leftValue,
     [NotNull] SqlExpression rightValue,
     [NotNull] SqlExpression stringComparison)
 {
     if (TryGetExpressionValue <StringComparison>(stringComparison, out var cmp))
     {
         return(CreateExpressionForCaseSensitivity(
                    cmp,
                    () =>
         {
             if (leftValue is ColumnExpression)
             {
                 // Applying the binary operator to the non-column value enables SQL to
                 // utilize an index if one exists.
                 return _sqlExpressionFactory.Equal(
                     leftValue,
                     Utf8Bin(rightValue)
                     );
             }
             else
             {
                 return _sqlExpressionFactory.Equal(
                     Utf8Bin(leftValue),
                     rightValue
                     );
             }
         },
                    () =>
                    _sqlExpressionFactory.Equal(
                        LCase(leftValue),
                        Utf8Bin(LCase(rightValue))
                        )
                    ));
     }
     else
     {
         return(new CaseExpression(
                    new[]
         {
             new CaseWhenClause(
                 _sqlExpressionFactory.In(stringComparison, _caseSensitiveComparisons, false),
                 // Case sensitive, accent sensitive
                 _sqlExpressionFactory.Equal(
                     leftValue,
                     Utf8Bin(rightValue)
                     )
                 )
         },
                    // Case insensitive, accent sensitive
                    _sqlExpressionFactory.Equal(
                        LCase(leftValue),
                        Utf8Bin(LCase(rightValue))
                        )
                    ));
     }
 }