Linq to entities忽略了套管,NotSupportedException

时间:2016-01-06 11:39:12

标签: c# entity-framework linq

我需要通过忽略大小写从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)'方法,和   此方法无法转换为商店表达式。

2 个答案:

答案 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());