Я полагаю, что такое сопоставление не предоставляется в текущих версиях SQLite. Таким образом, может показаться, что наиболее разумным планом является удаление сортировки из запроса и последующая сортировка в чистом .Net, где вы имеете полный контроль и доступ к конструкциям, таким как информация о культуре потока.
Поскольку оба процесса происходят в одном и том же процессе, это не должно иметь большого значения с точки зрения производительности, если ваш набор данных не очень большой.
SQLite 3 допускает определенные пользователем функции сортировки, и они могут быть выполнены в SQLite.Net как функции .net, но накладные расходы на обратный вызов через управляемую / неуправляемую границу значительны. Вот один человек пытается сделать это в C ++ . Если у вас нет доступа к чьей-либо другой проверенной и стабильной сортировке, чувствительной к культуре Юникода, в C ++, я предлагаю придерживаться простой сортировки после подхода, где это возможно.
Конечно, если производительность пользовательского сопоставления более чем достаточна для ваших текущих потребностей, тогда пойдите с этим.
[SQLiteFunction(Name = "CULTURESORT", FuncType = FunctionType.Collation)]
class CultureSort : SQLiteFunction
{
public override int Compare(string param1, string param2)
{
return String.Compare(
param1,param2, CultureInfo.CurrentCulture, CompareOptions.IgnoreCase)
);
}
}
Опубликуйте сценарий, если вам интересно:
Существует благословенная сборка SQLite, которая интегрирует библиотеку ICU для «правильной» поддержки юникода при упорядочении / like / upper / lower, но вам нужно будет интегрировать это в код sqlite, используемый в качестве основы для. Чистая обертка. Это много нелегко.