如何使用实体框架搜索字符串.包含和,不区分重音

本文关键字:不区 包含 实体 何使用 框架 搜索 字符串 | 更新日期: 2023-09-27 18:22:03

在我的数据库中,我有一个存储城市的表。有些城市的口音像"Foz do Iguaçu"。

在我的MVC应用程序中,我有一个JSON,它返回一个基于单词的城市列表,然而,很少有用户不使用重音来搜索城市,例如"Foz do Iguacu"。

在我的数据库中,我有"Foz do IguaÇu",但用户用户搜索"Foz do IguaCu"

如何在表中搜索记录,忽略重音符号?

这是我的代码:

    using (ServiciliEntities db = new ServiciliEntities())
    {
        List<Cidades> lCidades = db.Cidades.Where(c => c.CidNome.ToLower().Contains(q.Trim().ToLower())).OrderBy(c => c.CidNome).Take(10).ToList();
        ArrayList lNomes = new ArrayList();
        foreach (Cidades city in lCidades)
            lNomes.Add(new {city.CidNome, city.Estados.EstNome});
        return Json(new { data = lNomes.ToArray() });
    }

如何使用实体框架搜索字符串.包含和,不区分重音

您可以在数据库中的列上设置不区分重音的排序规则顺序。然后查询应该可以工作了。例如,如果将SQL_LATIN1_GENERAL_CP1_CI_AI设置为CidNome列,则查询将根据需要执行。

使用此SQL脚本:

ALTER TABLE dbo.YourTableName
ALTER COLUMN YourColumnName NVARCHAR (100) COLLATE SQL_Latin1_General_CP1_CS_AS NULL

解决方案如下:

ALTER TABLE dbo.YourTableName
ALTER COLUMN YourColumnName NVARCHAR (100) COLLATE SQL_Latin1_General_CP1_CI_AI NULL

其中LATIN1_GENERAL表示英语(US),CI表示不区分大小写,AI表示不区分重音。