实体框架FirstOrDefault中的字符串比较异常

时间:2016-03-11 21:14:03

标签: c# entity-framework string-comparison

我正在使用Entity Framework查询表。第一部分代码是我写的,第二部分是ReSharper建议我也重构它。如果密钥不存在,第一个优雅地返回null,但第二个抛出异常。

尝试使用表中的0-1记录(所有列都标记为NOT NULL)

有效的代码:

context.brandlink.FirstOrDefault(x => x.ManufacturerKey.ToLower() == manufacturerKey.ToLower());

以及不起作用的代码:

context.brandlink.FirstOrDefault(x => String.Equals(x.ManufacturerKey, manufacturerKey, StringComparison.InvariantCultureIgnoreCase));

抛出异常:

  

为方法调用提供的参数数量不正确'布尔值   Equals(System.String,System.String,System.StringComparison)'

所以我的问题是:两个表达式之间有什么区别?

1 个答案:

答案 0 :(得分:9)

  

所以我的问题是:两个表达式之间有什么区别?

差异在于后者正在使用根据String.Equals Method (String, String, StringComparison)不支持的CLR CLR Method to Canonical Function Mapping而前者使用的所有方法(string.ToLower和字符串相等运算符)得到支持。

通常,您无法控制代码中EF查询的sting比较,因为它们是由数据库控制的。