Eine Möglichkeit, zu tun, ist es eine benutzerdefinierte Kollatierung Registrierung ... das könnte man (! Völlig ungetestet) loszulegen:
[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);
}
}
Und dann, es zu benutzen, müssen Sie es registrieren, bevor Sie Ihre Datenbank öffnen:
SQLiteFunction.RegisterFunction(typeof(SQLiteNormalizedComparer));
Sobald dies erledigt ist, können Sie diese Sortierung zu Ihrer Tabelle hinzufügen, zum Beispiel:
CREATE TABLE `myTable` (
`Id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`Name` TEXT NOT NULL COLLATE NORMALIZEDCI)
Auch dies alles nicht getestet ... Ich Schnipsel verwenden ich von hier aus hatte und dort um diese Antwort zu geben, aber ich würde nicht erwarten, Kopie & Paste würde funktionieren. Ich habe hier keine Umgebung, in der ich das testen kann.
Anstatt eine eigene Kollatierung für eine Tabelle zu haben (was es möglicherweise nicht portabel macht), würde ich lieber eine zusätzliche "Suche" -Spalte haben, wo Sie normierte (zB mit diakritischen Zeichen) Zeichenfolgen einfügen können , so verwenden Sie das für die Suche und das Original für die Anzeige. Dies verdoppelt praktisch Ihre Speicheranforderungen, aber SqLite-Datenbanken sind in der Regel klein, also Ihre Wahl hier.
Können Sie teilen, was ist Ihr Schlüssel und was versuchen Sie zu erreichen? –
Können Sie auch die SQL-Abfrage teilen, die Sie bisher haben? –
In SqlServer ist es möglich, "akzentunempfindlich" anzugeben. Könnte das auch in sqlite möglich sein? –