我需要在包含重音符号的字符串字段的表上执行搜索,可以应用许多运算符:以列表开头,包含,等于...
如果我搜索Müller
,我还要检索Mueller
(ue
是ü
的德语翻译),对于其他带有重音符号的字母,我也知道可以通过修改NLS_COMP
和NLS_SORT
SQL> ALTER SESSION SET NLS_COMP=LINGUISTIC;
SQL> ALTER SESSION SET NLS_SORT=BINARY_AI;
我也知道可以在列级别进行归类,但这仅从12.2版本开始可用, 有什么想法吗?
谢谢您的帮助,
Bilel
答案 0 :(得分: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);
}
OracleGlobalization
的{{3}}文档可用
答案 1 :(得分:0)
这对于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();
}