2014-12-11 2 views
0

В приложении C#, которое использует iBATIS.NET для сопоставления данных в базу данных SQLite, я хочу иметь возможность сортировать определенные столбцы по алфавиту, который немного отличается от английского алфавита (есть некоторые специальные символы, а порядок некоторых символов другой). Я хочу получить из базы данных результаты, которые уже отсортированы, потому что сортировка в самом приложении невозможна из-за разбиения на страницы.Как применить настраиваемую сортировку к конкретным столбцам базы данных SQLite?

После некоторого исследования я пришел к выводу, что применение индивидуальной сортировки может быть единственным вариантом здесь. Правильно ли это заключение?

Однако я не мог понять, как это можно сделать в описанной ситуации. API iBATIS, по-видимому, не имеет ничего общего с сопоставлениями, и я не вижу очевидного способа добиться этого при помощи настройки базы данных. Итак, как это можно сделать?

+0

@BenRobinson OP спрашивает о SQLite, где есть только 3 встроенных сопоставления, и вам нужно предоставить свою собственную функцию C для создания пользовательской сортировки –

ответ

3

Пользовательские функции и сопоставления являются характеристикой драйвера ADO.NET, а не ORM, который находится поверх него. Драйвер SQlite ADO.Net действительно позволяет определить пользовательские функции, проверить the second answer to this question:

/// <summary> 
/// User-defined collating sequence using the current UI culture. 
/// </summary> 
[SQLiteFunction(Name = "MYSEQUENCE", FuncType = FunctionType.Collation)] 
class MySequence : SQLiteFunction 
{ 
    public override int Compare(string param1, string param2) 
    { 
    return String.Compare(param1, param2, true); 
    } 
} 

Вы должны зарегистрировать функцию в вашем коде, прежде чем использовать его с

SQLiteFunction.RegisterFunction(typeof(MySequence)); 

Performance может быть проблемой, как вы платите цену за вызов Interop каждый раз, когда производится сравнение

Смежные вопросы