我正在尝试通过搜索字符串过滤列表。它说在蓝色注释的文档中 https://learn.microsoft.com/en-us/aspnet/core/data/ef-mvc/sort-filter-page that:
- IQueryable 为您提供了数据库提供程序的实现
Contains
.
-
IEnumerable
为您提供 .NET Framework 实现Contains
- SQL Server 实例的默认设置不区分大小写。
- Using
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。
从 EF Core 2.1 版本开始,您可以使用 HasConversion()。但数据库中的信息会以小写形式存储:
builder.Property(it => it.Email).HasConversion(v => v.ToLowerInvariant(), v => v);
我解决了类似的问题。这个改变解决了我所有的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)