繁体   English   中英

如何使 EF.Functions.Like 不区分大小写?

[英]How to make EF.Functions.Like case-insensitive?

我正在使用 EF Core 3.1 + MySQL,并使用此方法进行查询:

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));
}

我升级到使用 EF.Function.Like 以获得更好的性能:

if (!String.IsNullOrEmpty(searchString))
{
customers = customers.Where(x => EF.Functions.Like(x.Email, $"%{searchString}%"));
}

但是它是区分大小写的,如何让它不区分大小写呢?

文档

请注意,如果这个 function 被翻译成 SQL,那么比较的语义将取决于数据库配置。 特别是,它可以区分大小写或不区分大小写。 如果在客户端上评估此 function,那么它将始终使用不区分大小写的比较。

所以,这取决于你的服务器。

作为一种解决方法,您可以将参数设为大写。

if (!String.IsNullOrEmpty(searchString))
{
    customers = customers.Where(x => EF.Functions.Like(x.Email.ToUpper(), $"%{searchString.ToUpper()}%"));
}

根据这个应该有一个 function 映射到UPPER所以你得到正确的 SQL。

根据文档

请注意,如果这个 function 被翻译成 SQL,那么比较的语义将取决于数据库配置。 特别是,它可以区分大小写或不区分大小写。 如果在客户端上评估此 function,那么它将始终使用不区分大小写的比较。

因此,区分大小写的不是 function,而是您的数据库/列排序规则设置。 您可以使用Collat e function 来指定不同的、不区分大小写的排序规则。 更多关于MySQL 归类

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM