【问题标题】:Ignore accents on search using linq to entities (EF) and Oracle 12.1使用 linq to entity (EF) 和 Oracle 12.1 忽略搜索重音
【发布时间】:2020-01-22 06:48:24
【问题描述】:

我需要在包含重音的字符串字段的表上执行搜索,可以应用许多运算符:列表中的开头、包含、相等... 如果我搜索Müller,我还想检索Muellerue 是德语中ü 的翻译),对于其他带有重音符号的字母也是如此,我知道可以通过修改NLS_COMPNLS_SORT

SQL> ALTER SESSION SET NLS_COMP=LINGUISTIC;
SQL> ALTER SESSION SET NLS_SORT=BINARY_AI;

我也知道可以在列级别进行排序,但这仅从 12.2 版本开始可用, 请问有什么办法吗?

感谢您的帮助,

比尔

【问题讨论】:

  • 不,这不是重复的,这种方法不适用于所有字母
  • 那么请添加更多示例,您的Mestlé 与那里的解决方案一起使用
  • 我已经更新了我的问题
  • 最后我将使用 NLS_COMP 和 NLS_SORT 参数,您知道如何在查询执行之前使用实体框架设置 oracle 会话参数吗?

标签: oracle entity-framework collation


【解决方案1】:

我已经使用 oracle NLS session parameters 解决了我的问题。

 if(condition == true)
   AlterSortSession(context);

 public void AlterSortSession(MyContext context)
 {
   var connection = (OracleConnection)context.Database.Connection;
   connection.StateChange += AlterSortSession;
 }

 private static void AlterSortSession(object sender, StateChangeEventArgs e)
 {
  if (e.CurrentState != ConnectionState.Open)
    return;

  var connection = (OracleConnection)sender;
  OracleGlobalization info = connection.GetSessionInfo();

  info.Sort = "XGERMAN_DIN_AI";
  info.Comparison = "LINGUISTIC";

  connection.SetSessionInfo(info);
}

here 提供 OracleGlobalization 的文档

【讨论】:

    【解决方案2】:

    这对我来说适用于 EF4:

    using (var context = new Entities()) {
    
        // Set Case Insensitive, Accent Insensitive
    
        var orcl = (OracleConnection)(((System.Data.EntityClient.EntityConnection)(context.Connection)).StoreConnection);
    
        if (context.Connection.State != System.Data.ConnectionState.Open)
        {
            context.Connection.Open();
        }
    
        var sInfo = orcl.GetSessionInfo();
    
        sInfo.Sort = "GENERIC_M_AI";
        sInfo.Comparison = "LINGUISTIC";
    
        orcl.SetSessionInfo(sInfo);
    
        // Execute linq query
    
        var row = context.table.Where(a => a.varcharField.Contains("match str")).FirstOrDefault();
    
    }
    

    【讨论】:

      猜你喜欢
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      • 2012-06-05
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多