SQLite对非ASCII符号使用LIKE有限制。ICU分机solves出现此问题。如何用C#编写代码来创建以下不区分大小写的语句:
SELECT * FROM Persons WHERE surname LIKE '%Пупкин%'
备注:如果在C#LIKE语句中使用非ASCII符号有其他解决方案,请提供。
o2gm4chl1#
var result = people.Where(x=> x.Surname.IndexOf(searchText, StringComparison.InvariantCultureIgnoreCase) > -1);
bpsygsoo2#
我试过这个办法,可能会对你有帮助:
_database.Table<People>.Where(c => c.surname.ToUpper().Contains("Пупкин".ToUpper()) )
请尝试给我们一个反馈,无论它是不是工作。
bxjv4tth3#
C#代码
var lst = (From p In persons Where p.surname.IndexOf(searchText, StringComparison.InvariantCultureIgnoreCase) >= 0 Select p).ToList()
InvariantCultureIgnoreCase是String.IndexOf方法的选项之一。这可能会帮助您实现类似于C#的
voase2hg4#
IEnumerable<Persons> p = persons.Where(x => x.surname.Contains("Пупкин"));
将会产生
您不需要额外的参数,因为生成的LIKE-语句已经自动不区分大小写。虽然IndexOf()是个好主意,但LINQ2SQL不支持它。LINQ2SQL不支持任何方式来提供CultureInfo,我不确定SQLite服务器是否会比较InvariantCulture或Ordinal。
IndexOf()
CultureInfo
InvariantCulture
Ordinal
**编辑:**当您设置EntityFramework with SQLite时(建议您)。您可以按如下方式检索数据:
string searchTerm = "Пупкин"; using (MyDatabaseContext context = new MyDatabaseContext()) { IEnumerable<Persons> p = context.Persons.Where(x => x.surname.Contains(searchTerm)); }
4条答案
按热度按时间o2gm4chl1#
bpsygsoo2#
我试过这个办法,可能会对你有帮助:
请尝试给我们一个反馈,无论它是不是工作。
bxjv4tth3#
C#代码
InvariantCultureIgnoreCase是String.IndexOf方法的选项之一。这可能会帮助您实现类似于C#的
voase2hg4#
将会产生
您不需要额外的参数,因为生成的LIKE-语句已经自动不区分大小写。
虽然
IndexOf()
是个好主意,但LINQ2SQL不支持它。LINQ2SQL不支持任何方式来提供CultureInfo
,我不确定SQLite服务器是否会比较InvariantCulture
或Ordinal
。**编辑:**当您设置EntityFramework with SQLite时(建议您)。您可以按如下方式检索数据: