如何使用 ICU 扩展为 SQLIte 编写不区分大小写的 C# LIKE 语句
本文关键字:大小写 语句 LIKE 不区 ICU 何使用 扩展 SQLIte | 更新日期: 2023-09-27 18:18:21
>SQLite 对非 ASCII 符号使用 LIKE 有限制。ICU扩展解决了这个问题。如何使用 C# 编写代码以创建以下不区分大小写的语句:
SELECT * FROM Persons WHERE surname LIKE '%Пупкин%'
附言如果有另一种解决方案可以在 C# LIKE 语句中用于非 ASCII 符号,请提供它。
var result = people.Where(x=> x.Surname.IndexOf(searchText, StringComparison.InvariantCultureIgnoreCase) > -1);
我尝试了这个替代方案,可能会对您有所帮助:
_database.Table<People>.Where(c => c.surname.ToUpper().Contains("Пупкин".ToUpper()) )
请尝试向我们提供反馈,如果它是否有效。
C# 代码
var lst = (From p In persons
Where p.surname.IndexOf(searchText, StringComparison.InvariantCultureIgnoreCase) >= 0
Select p).ToList()
InvariantCultureIgnoreCase 是 String.IndexOf 方法的选项之一。这可能有助于您实现 C# LIKE
IEnumerable<Persons> p = persons.Where(x => x.surname.Contains("Пупкин"));
将产生
SELECT * FROM Persons WHERE surname LIKE '%Пупкин%'
您不需要额外的参数,因为生成的 LIKE 语句已经自动不区分大小写。
虽然IndexOf()
是个好主意,但LINQ2SQL不支持它。LINQ2SQL不支持任何提供CultureInfo
的方法,我不确定SQLite服务器是否比较InvariantCulture
或Ordinal
。
编辑:当你用SQLite设置实体框架时(我建议你(。您可以像这样检索数据:
string searchTerm = "Пупкин";
using (MyDatabaseContext context = new MyDatabaseContext())
{
IEnumerable<Persons> p = context.Persons.Where(x => x.surname.Contains(searchTerm));
}