我有一些EF/LINQ语句,我需要不区分大小写的文本搜索,但我们的oracle数据库区分大小写.如何在连接/命令级别执行必要的ALTER SESSION语句,以便它将影响后续的同一上下文调用?
命令我想我需要运行(OTN线程)
ALTER SESSION SET NLS_SORT=BINARY_CI
Run Code Online (Sandbox Code Playgroud)
我知道Database.ExecuteSqlCommand和Database.Connection.CreateCommand都是方法,但我无法弄清楚'何时'.如果我在创建之后但在LINQ之前手动尝试对上下文执行此操作,我必须手动打开和关闭连接,然后它似乎是与LINQ不同的事务,并且似乎不适用.
我需要使用string.CompareOrdinal(...)linq查询内部来比较字符串.
string max;
string min;
var res = db.Table
.Where(c => string.CompareOrdinal(c.Id, min) >= 0)
.Where(c => string.CompareOrdinal(c.Id, max) <= 0)
.ToList();
Run Code Online (Sandbox Code Playgroud)
代码抛出一个异常:
LINQ ti实体不会重新确定方法'Int32 CompareOrdinal(System.String,System.String)'方法,并且此方法无法转换为存储表达式.
表中有很多数据,所以我真的需要这个where子句.
有没有解决的办法?
更新
我不是想要确定两个字符串是否相等 - 区分大小写.
我正在努力确定一个字符串是否在一个范围内.所以问题是
显然,我不能用 string.CompareOrdinal
我不明白为什么:
在db中,我在Members表中记录了Name ="Bob"
var a = await repository.Members.FirstOrDefaultAsync(x => x.Name == "BOB"); //is true (Entity Framework Core)
var c = repository.Members.FirstOrDefault(x => x.Name == "BOB"); //is true (LINQ)
var b = "Bob" == "BOB"; //is false
Run Code Online (Sandbox Code Playgroud) ValidateUser使用EF 的会员提供者非常简单
public override bool ValidateUser(string username, string password)
{
// Validate User Credentials
var r = db.ST_Users.FirstOrDefault(
x => x.Username.Equals(username) &&
x.Password.Equals(password));
return r != null ? true : false;
}
Run Code Online (Sandbox Code Playgroud)
但true无论我是否使用balexandre或,它都会返回(查找并检索孔对象)BAleXanDre.
如何在区分大小写模式下启用EF进行比较?
我知道如何比较不区分大小写(使用StringComparison.CurrentCultureIgnoreCase重载,但我只是想要相反)
我有一个包含多个输入的搜索表单 - 名字,姓氏,公司......
我想根据用户输入返回实体,或者如果没有输入任何内容,例如在姓氏字段中,则返回所有姓氏.
我相信我应该为此使用null-coalescing,就像t-sql中的"ISNULL"...
contacts = contacts.Where(s => s.firstname.ToUpper().Contains(fNameSearch.ToUpper() ?? *)
Run Code Online (Sandbox Code Playgroud)
问题是我不知道如何在这种类型的预测中使用通配符.
例如,如果fNameSearch为null或white-space,则返回firstname属性中包含"test"的所有内容...
contacts = contacts.Where(s => s.firstname.ToUpper().Contains(fNameSearch.ToUpper() ?? "test")
Run Code Online (Sandbox Code Playgroud)
但我希望能够归还所有东西,而不仅仅是"测试".
c# ×3
linq ×3
c#-4.0 ×1
comparison ×1
odp.net ×1
oracle ×1
sql ×1
sql-server ×1
string ×1
vb.net ×1