in EFCore/src/Query/Expressions/Internal/MySQLStringComparisonMethodTranslator.cs [132:209]
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
{
#if !NET8_0_OR_GREATER
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))
)
);
#else
return new CaseExpression(
new[]
{
new CaseWhenClause(
_sqlExpressionFactory.In(stringComparison,(IReadOnlyList<SqlExpression>)_caseSensitiveComparisons),
// Case sensitive, accent sensitive
_sqlExpressionFactory.Equal(
leftValue,
Utf8Bin(rightValue)
)
)
},
// Case insensitive, accent sensitive
_sqlExpressionFactory.Equal(
LCase(leftValue),
Utf8Bin(LCase(rightValue))
)
);
#endif
}
}