如何使用 Entity Framework 和 .Contains 以及不区分重音的方式搜索字符串

How to search string using Entity Framework with .Contains and with accent-insensitive

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

这样的口音

在我的 MVC 应用程序中,我有一个 JSON return 基于单词的城市列表,但是,很少有用户不使用重音来搜索城市,例如"Foz do Iguacu".

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

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

这是我的代码:

    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 表示英语(美国),CI 表示不区分大小写,AI 表示不区分重音。