如果我们在 SQLite 中写 SQL 语句:order by TownName asc(这里 TownName 是中文),会发现它并不是按中文拼音来排的序,这与我们想象的不一样,要怎样才能实现中文拼音排序呢?
其实是要我们自己写排序方法。
第一步、写排序方法。
/// <summary> /// SQLite 自定义排序规则,这里使用拼音升序。 /// </summary> [SQLiteFunction(FuncType = FunctionType.Collation, Name = "PinYinAsc")] class SQLiteFunction_Collation_PinYinAsc : SQLiteFunction { public override int Compare(string x, string y) { return string.Compare(x, y); } }
第二步、为 SQLite 注册自定义排序方法
// 为 SQLite 注册自定义排序方法 SQLiteFunction.RegisterFunction(typeof(SQLiteFunction_Collation_PinYinAsc));
在同一个进程中,注册一次就可以了,当然重复注册也不会出错。
第三步、SQL 中使用自定义排序
注意,就不是 order by TownName asc 了,而是:
order by TownName COLLATE PinYinAsc
这里 PinYinAsc 就是前面的 Name="PinYinAsc",如果名称不对,或者没有注册,执行 SQL 时会报错。
相关阅读