c# - 在 EF Core 中编写一个不区分大小写的搜索查询?
问题描述
我想问一个关于 SQL Server 和 EF Core 的问题。数据库中的排序规则是Latin1_CI_AS
,我想编写一个包含土耳其字符的搜索查询。
在数据库中,'personnel' 表中有一条名为“SELİM”的记录。当我在 EF Core 中编写这样的查询时:
public async Task<IList<PersonnelGetDto>> Get(PersonnelGetPayload payload)
{
if (payload.Name != null)
query = query.Where(x => x.Name.Contains(payload.Name));
}
如果我的搜索条件为“selim”,则该列表为空。
我没有机会将数据库中的排序规则更改为土耳其语,因为我们的应用程序是多语言的。我认为其他语言会有问题。还是我错了?
我还写了字符串扩展名。但是,在将 LINQ 查询转换为 SQL 时,所有记录都会到达服务层,因为 LIKE 运算符没有分配 WHERE 子句。在 sql 端运行这个条件非常重要。如果我把所有的数据集都拿到服务层去查询,那会花费我很多。
当我在数据库中键入这样的查询时,我可以解决这个问题:
SELECT * FROM Personnel WHERE Name LIKE 'selim' COLLATE Turkish_CI_AS
我想如果我可以在 EF Core 上操作整理,我会解决这个问题。
解决方案
你在EF.Functions.Likeusing Microsoft.EntityFrameworkCore;
之后,如果你还没有,这需要添加。然后,您的查询将类似于:
query.Where(x => EF.Functions.Like(x.Name, $"%{payload.Name}%"))
这直接转换为LIKE
生成的 SQL 语句中的运算符。它不适用于每个 DBMS,但只要您添加了Microsoft.EntityFrameworkCore.SqlServer,您就可以开始使用(假设您的问题已正确标记)。
推荐阅读
- sql-server - 如何获取主管下属的各级员工的名单?
- angularjs - AngularJS 文件上传错误:$injector:unpr 未知提供者
- xamarin - 在 Xamarin Forms 中找不到可移植类库文件夹
- r - 拆分饼图上的分组值
- kubernetes - 每次部署后 kubernetes 服务都会自动删除
- python - 将变量的结果作为参数添加时,Python 请求将琥珀色 (&) 附加到 URL
- sqlite - FireDac 缓存更新停止更新
- html - 给出类名时css未应用于div
- android - 致命异常:android.app.RemoteServiceException:Context.startForegroundService() 没有调用 Service.startForeground():
- perl - 当模块版本太现代时断言