Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq实体忽略大小写,不支持异常_C#_Entity Framework_Linq - Fatal编程技术网

C# Linq实体忽略大小写,不支持异常

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

我需要在忽略大小写的情况下从DB上下文中查找项目,但无法使其正常工作,到目前为止我尝试的是:

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));