使用linq to entities(EF)和Oracle 12.1在搜索时忽略重音符号
我需要在一个包含重音符号的字符串字段的表上执行搜索,可以应用许多运算符:start with,contains,equal,in the list。。。 如果我搜索使用linq to entities(EF)和Oracle 12.1在搜索时忽略重音符号,oracle,entity-framework,collation,Oracle,Entity Framework,Collation,我需要在一个包含重音符号的字符串字段的表上执行搜索,可以应用许多运算符:start with,contains,equal,in the list。。。 如果我搜索Müller我还想检索Mueller(ue是德语中u的翻译),其他带有重音的字母也是如此,我知道可以通过修改NLS_COMP和NLS_排序来实现这一点 SQL> ALTER SESSION SET NLS_COMP=LINGUISTIC; SQL> ALTER SESSION SET NLS_SORT=BINARY_AI;
Müller
我还想检索Mueller
(ue
是德语中u
的翻译),其他带有重音的字母也是如此,我知道可以通过修改NLS_COMP
和NLS_排序来实现这一点
SQL> ALTER SESSION SET NLS_COMP=LINGUISTIC;
SQL> ALTER SESSION SET NLS_SORT=BINARY_AI;
我还知道可以在列级别进行排序,但这仅在12.2版之后才可用,
有什么想法吗
谢谢你的帮助
比尔我已经用oracle解决了我的问题
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
这对我的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();
}
可能重复不,这不是重复,这种方法不适用于所有字母请添加更多示例,您的Mestlé
适用于解决方案我已更新了我的问题最后我将使用NLS_COMP和NLS_排序参数,您是否知道hoaw可以在执行查询之前使用entity framework设置oracle会话参数?