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

xxe27gdn  于 2022-11-15  发布在  SQLite
关注(0)|答案(4)|浏览(141)

SQLite对非ASCII符号使用LIKE有限制。ICU分机solves出现此问题。如何用C#编写代码来创建以下不区分大小写的语句:

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

备注:如果在C#LIKE语句中使用非ASCII符号有其他解决方案,请提供。

o2gm4chl

o2gm4chl1#

var result = people.Where(x=> x.Surname.IndexOf(searchText, StringComparison.InvariantCultureIgnoreCase) > -1);
bpsygsoo

bpsygsoo2#

我试过这个办法,可能会对你有帮助:

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

请尝试给我们一个反馈,无论它是不是工作。

bxjv4tth

bxjv4tth3#

C#代码

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

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

voase2hg

voase2hg4#

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

将会产生

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

您不需要额外的参数,因为生成的LIKE-语句已经自动不区分大小写。
虽然IndexOf()是个好主意,但LINQ2SQL不支持它。LINQ2SQL不支持任何方式来提供CultureInfo,我不确定SQLite服务器是否会比较InvariantCultureOrdinal

**编辑:**当您设置EntityFramework with SQLite时(建议您)。您可以按如下方式检索数据:

string searchTerm = "Пупкин";
using (MyDatabaseContext context = new MyDatabaseContext())
{
    IEnumerable<Persons> p = context.Persons.Where(x => x.surname.Contains(searchTerm));
}

相关问题