【问题标题】:How to apply a custom collation to specific columns of an SQLite database?如何将自定义排序规则应用于 SQLite 数据库的特定列?
【发布时间】:2015-02-09 19:51:02
【问题描述】:

在使用 iBATIS.NET 将数据映射到 SQLite 数据库的 C# 应用程序中,我希望能够按与英文字母略有不同的字母对特定列进行排序(有一些特殊字符和一些字符的顺序)是不同的)。我想从数据库中获取已经排序的结果,因为由于分页,在应用程序本身中排序是不可能的。

经过一些研究,我得出结论,应用自定义排序规则可能是这里唯一的选择。这个结论正确吗?

但是,我不知道在所描述的情况下如何做到这一点。 iBATIS API 似乎与排序规则无关,而且我没有看到一种明显的方法来实现对数据库配置的这种修改。那么,这是怎么做到的呢?

【问题讨论】:

  • @BenRobinson OP 询问 SQLite,其中只有 3 个内置排序规则,您需要提供自己的 C 函数来创建自定义排序规则

标签: c# sqlite sorting collation ibatis


【解决方案1】:

用户定义的函数和排序规则是 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));

性能可能是个问题,因为每次进行比较时,您都需要支付 Interop 调用的费用

【讨论】:

    猜你喜欢
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多