Один из способов сделать это является регистрацией пользовательской сверки ... это может вам начать (совершенно непроверенный!):
[SQLiteFunction(FuncType = FunctionType.Collation, Name = "NORMALIZEDCI")]
public class SQLiteNormalizedComparer : SQLiteFunction
{
private static string RemoveDiacritics(string text)
{
var normalizedString = text.Normalize(NormalizationForm.FormD);
var stringBuilder = new StringBuilder();
foreach (var c in normalizedString)
{
var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c);
if (unicodeCategory != UnicodeCategory.NonSpacingMark)
{
stringBuilder.Append(c);
}
}
return stringBuilder.ToString().Normalize(NormalizationForm.FormC);
}
public override int Compare(string x, string y)
{
return string.Compare(RemoveDiacritics(x), RemoveDiacritics(y), StringComparison.OrdinalIgnoreCase);
}
}
И затем использовать его, вам необходимо зарегистрироваться, прежде чем открыть свою базу данных:
SQLiteFunction.RegisterFunction(typeof(SQLiteNormalizedComparer));
Как только это будет сделано, вы можете добавить, что параметры сортировки в таблицу, например:
CREATE TABLE `myTable` (
`Id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`Name` TEXT NOT NULL COLLATE NORMALIZEDCI)
Опять же, все это непроверенные ... Я использовал фрагменты, которые я имел здесь и там чтобы ответить на этот вопрос, но я бы не ожидал, что копия & будет работать. У меня на самом деле нет среды, где я могу проверить это.
Кроме того, вместо того, чтобы иметь собственную сортировку для таблицы (что могло бы сделать ее не переносимой), я бы предпочел добавить дополнительный столбец «поиск», в который вы можете вставить нормализованные (с удаленными диакритами, например) строки , поэтому вы используете это для поиска, а оригинал для отображения. Это практически удваивает требования к хранению, но базы данных SqLite, как правило, небольшие, поэтому ваш выбор здесь.
Не могли бы вы поделиться тем, что является вашим ключом и чего вы пытаетесь достичь? –
Не могли бы вы также использовать SQL-запрос, который у вас есть? –
В SqlServer можно указать «нечувствительный к акценту». Возможно ли это и в sqlite? –