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)) ) )); } }