写一个在EF Core中不区分大小写的搜索查询?

问题描述 投票:1回答:1

我想问一个有关SQL Server和EF Core的问题。数据库中的排序规则为Latin1_CI_AS,我想编写一个包含土耳其语字符的搜索查询。

在数据库中,“人事”表中有一条名为“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上进行整理,我将解决问题。

c# sql-server .net-core entity-framework-core case-insensitive
1个回答
0
投票

您在EF.Functions.Like之后,如果尚未添加,则需要添加using Microsoft.EntityFrameworkCore;。然后,您的查询将类似于:

query.Where(x => EF.Functions.Like(x.Name, $"%{payload.Name}%"))

这将直接转换为生成的SQL语句中的LIKE运算符。并非每个DBMS都可用,但是只要添加了Microsoft.EntityFrameworkCore.SqlServer,就可以使用(假设问题标记正确)。

© www.soinside.com 2019 - 2024. All rights reserved.