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() 并在创建或迁移期间配置你的数据库排序规则。
在 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() 并在创建或迁移期间配置你的数据库排序规则。