EF Core 3.0 正确翻译 string.Equals ordinalIgnoreCase

EF Core 3.0 translating string.Equals ordinalIgnoreCase correctly

在 EF Core 3.0 之前这工作正常(在服务器+客户端上评估):

var exists = await _context.Countries.AsNoTracking().AnyAsync(x => x.CountryCode.Equals(country.CountryCode, StringComparison.OrdinalIgnoreCase));

现在在 EF Core 3.0 中翻译 string.Equals(str, StringComparison.OrdinalIgnoreCase) 部分的 best/preferred 方法是什么,以便查询仅在服务器端计算。

var exists = await _context.Countries.AsNoTracking().AnyAsync(x => x.CountryCode.ToUpper() == country.CountryCode.ToUpper());

var exists = await _context.Countries.AsNoTracking().AnyAsync(x => x.CountryCode.ToLower() == country.CountryCode.ToLower());

var exists = await _context.Countries.AsNoTracking().AnyAsync(x => x.CountryCode.ToUpperInvariant() == country.CountryCode.ToUpperInvariant());

var exists = await _context.Countries.AsNoTracking().AnyAsync(x => x.CountryCode.ToLowerInvariant() == country.CountryCode.ToLowerInvariant());

还是别的?

你不应该那样做,也不应该使用公认的答案方法,你应该只使用不带参数的 String.Equals() 并在创建或迁移期间配置你的数据库排序规则。