我需要通过忽略大小写从DB上下文中查找项目,但是无法使其工作,到目前为止我尝试过的是:
var interestingItem = ctx.MyItems.FirstOrDefault(x =>
x.Name.IndexOf(item.Name, StringComparison.OrdinalIgnoreCase) >= 0);
此外:
var interestingItem = ctx.MyItems.FirstOrDefault(x =>
string.Equals(x.Name, item.Name, StringComparison.InvariantCultureIgnoreCase));
我也试过申请ToLowerInvariant()
,但总是得到:
发生了'System.NotSupportedException'类型的异常 EntityFramework.SqlServer.dll但未在用户代码中处理
其他信息:LINQ to Entities无法识别该方法 'Int32 IndexOf(System.String,System.StringComparison)'方法,和 此方法无法转换为商店表达式。
答案 0 :(得分:4)
您使用的这两种方法都无法转换为SQL。您需要使用带有布尔IngoreCase
变量的var interestingItem = ctx.MyItems.FirstOrDefault(x =>
string.Compare(x.Name, item.Name, true) == 0));
方法:
overflow:hidden
或者,您可以在比较之前将两个字符串转换为小写字母。
答案 1 :(得分:0)
您可以使用应该支持的.ToLower()。
var interestingItem = ctx.MyItems.FirstOrDefault(x => x.Name.ToLower() == item.Name.ToLower());