一尘不染

如何在ef core 2中包含不区分大小写的内容?

sql

我正在尝试通过搜索字符串过滤列表。它在文档的蓝色注释上说:

  • IQueryable为您提供的数据库提供程序实现Contains
  • IEnumerable 为您提供.NET Framework的实现 Contains
  • SQL Server实例的默认设置不区分大小写。
  • ToUpper应该避免使用它来进行不区分大小写的显式调用,因为这会降低性能。

我的过滤如下:

IQueryable<ApplicationUser> customers = 
    from u in _context.Users
    where (u.Customer != null && u.IsActive)
    select u;

if (!string.IsNullOrEmpty(searchString))
{
    customers = customers.Where(s => s.Email.Contains(searchString));
}

但是,该解决方案区分大小写,我也不十分清楚为什么:因为我正在使用IQueryable,所以它应该使用数据库提供程序实现,默认情况下不区分大小写,对吗?

我正在使用EF Core 2,当前仅运行本地MSSQLLocalDB。


阅读 240

收藏
2021-05-23

共1个答案

一尘不染

从EF Core 2.1版开始,您可以使用HasConversion()。但是数据库中的信息将以小写形式存储:

builder.Property(it => it.Email).HasConversion(v => v.ToLowerInvariant(), v => v);

我解决了类似的问题。这项更改解决了我所有的问题。

2021-05-23