对于非ASCII符号,SQLite使用LIKE limitation。 ICU扩展solves这个问题。 如何用C#编写代码来创建以下不区分大小写的语句:
SELECT * FROM Persons WHERE surname LIKE '%Пупкин%'
P.S。如果有另一种解决方案在C#LIKE语句中使用非ASCII符号,请提供它。
答案 0 :(得分:0)
var result = people.Where(x=> x.Surname.IndexOf(searchText, StringComparison.InvariantCultureIgnoreCase) > -1);
答案 1 :(得分:0)
我试过这个替代方案,可能会对你有所帮助:
_database.Table<People>.Where(c => c.surname.ToUpper().Contains("Пупкин".ToUpper()) )
如果有效,请尝试给我们反馈。
答案 2 :(得分:-1)
C#代码
var lst = (From p In persons
Where p.surname.IndexOf(searchText, StringComparison.InvariantCultureIgnoreCase) >= 0
Select p).ToList()
InvariantCultureIgnoreCase是String.IndexOf方法的选项之一。这可能有助于您实现C#LIKE
答案 3 :(得分:-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
。
编辑:设置EntityFramework with SQLite时(我建议您)。您可以像这样检索数据:
string searchTerm = "Пупкин";
using (MyDatabaseContext context = new MyDatabaseContext())
{
IEnumerable<Persons> p = context.Persons.Where(x => x.surname.Contains(searchTerm));
}