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

J.K*_*rk. 8 c# sql entity-framework contains entity-framework-core

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

  • 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));
}
Run Code Online (Sandbox Code Playgroud)

然而,这个解决方案区分大小写,我真的不明白为什么:因为我正在使用IQueryable,它应该使用数据库提供程序实现,默认情况下不区分大小写,对吧?

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

Ale*_*sev 5

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

builder.Property(it => it.Email).HasConversion(v => v.ToLowerInvariant(), v => v);
Run Code Online (Sandbox Code Playgroud)

我解决了类似的问题。这个改变解决了我所有的问题。