C# Linq实体忽略大小写,不支持异常
我需要在忽略大小写的情况下从DB上下文中查找项目,但无法使其正常工作,到目前为止我尝试的是:C# Linq实体忽略大小写,不支持异常,c#,entity-framework,linq,C#,Entity Framework,Linq,我需要在忽略大小写的情况下从DB上下文中查找项目,但无法使其正常工作,到目前为止我尝试的是: var interestingItem = ctx.MyItems.FirstOrDefault(x => x.Name.IndexOf(item.Name, StringComparison.OrdinalIgnoreCase) >= 0); 此外: 我也尝试过将应用到LowerinVariant(),但总是得到: 中发生“System.NotSupportedExcept
var interestingItem = ctx.MyItems.FirstOrDefault(x =>
x.Name.IndexOf(item.Name, StringComparison.OrdinalIgnoreCase) >= 0);
此外:
我也尝试过将应用到LowerinVariant()
,但总是得到:
中发生“System.NotSupportedException”类型的异常
EntityFramework.SqlServer.dll,但未在用户代码中处理
附加信息:LINQ to实体无法识别该方法
“Int32 IndexOf(System.String,System.StringComparison)”方法,以及
无法将此方法转换为存储表达式
您可以使用应支持的.ToLower()
var interestingItem = ctx.MyItems.FirstOrDefault(x => x.Name.ToLower() == item.Name.ToLower());
您正在使用的两种方法都不能转换为SQL。您需要使用
字符串。比较采用布尔IngoreCase
变量的方法:
var interestingItem = ctx.MyItems.FirstOrDefault(x =>
string.Compare(x.Name, item.Name, true) == 0));
或者,您可以在比较之前将两个字符串转换为小写。好。作品还发现包含
,它被翻译成类似SQL的在SQL Server
中是不区分大小写的,这将适用于我的情况,其中名称是唯一的。@ErkiM.-<代码>包含
(因此与
类似的
)将比相等比较慢,但这是否会影响应用程序只有通过测试才能明显。
var interestingItem = ctx.MyItems.FirstOrDefault(x =>
string.Compare(x.Name, item.Name, true) == 0));