如何使用 ICU 扩展为 SQLIte 编写 C# 不区分大小写的 LIKE 语句?

问题描述 投票:0回答:4

SQLite 对非 ASCII 符号使用 LIKE 有限制。 ICU 扩展 解决 这个问题。 如何在 C# 中编写代码以创建以下不区分大小写的语句:

SELECT * FROM Persons WHERE surname LIKE '%Пупкин%'

附言如果有在 C# LIKE 语句中使用非 ASCII 符号的另一种解决方案,请提供。

c# sqlite icu
4个回答
0
投票
var result = people.Where(x=> x.Surname.IndexOf(searchText, StringComparison.InvariantCultureIgnoreCase) > -1);

0
投票

我试过这个替代方案,可能会对你有所帮助:

 _database.Table<People>.Where(c => c.surname.ToUpper().Contains("Пупкин".ToUpper())  )

如果有效,请尝试给我们反馈。


-1
投票

C#代码

var lst = (From p In persons
            Where p.surname.IndexOf(searchText, StringComparison.InvariantCultureIgnoreCase) >= 0
            Select p).ToList()

InvariantCultureIgnoreCaseString.IndexOf 方法的选项之一。这可能会帮助您实现 C# LIKE


-1
投票
IEnumerable<Persons> p = persons.Where(x => x.surname.Contains("Пупкин"));

会产生

SELECT * FROM Persons WHERE surname LIKE '%Пупкин%'

您不需要额外的参数,因为生成的 LIKE 语句已经自动不区分大小写。

虽然

IndexOf()
是个好主意,但它在 LINQ2SQL 上不受支持。 LINQ2SQL 不支持以任何方式提供
CultureInfo
并且我不确定 SQLite Server 比较
InvariantCulture
Ordinal
.

编辑: 当您使用 SQLite 设置EntityFramework 时(我建议您)。您可以像这样检索数据:

string searchTerm = "Пупкин";
using (MyDatabaseContext context = new MyDatabaseContext())
{
    IEnumerable<Persons> p = context.Persons.Where(x => x.surname.Contains(searchTerm));
}
© www.soinside.com 2019 - 2024. All rights reserved.