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 Server 比较 InvariantCulture
或 Ordinal
.
编辑: 当您使用 SQLite 设置EntityFramework 时(我建议您)。您可以像这样检索数据:
string searchTerm = "Пупкин";
using (MyDatabaseContext context = new MyDatabaseContext())
{
IEnumerable<Persons> p = context.Persons.Where(x => x.surname.Contains(searchTerm));
}