【问题标题】:String Comparison exception within Entity Framework FirstOrDefault实体框架 FirstOrDefault 中的字符串比较异常
【发布时间】:2016-06-27 06:38:20
【问题描述】:

我正在使用实体框架查询一个表。第一段代码是我写的,第二段是 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));

抛出异常:

为调用“Boolean”方法提供的参数数量不正确 等于(System.String, System.String, System.StringComparison)'

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

【问题讨论】:

    标签: c# entity-framework string-comparison


    【解决方案1】:

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

    区别在于后者使用的是CLR String.Equals Method (String, String, StringComparison),根据CLR Method to Canonical Function MappingEF不支持,而前者使用的所有方法(string.ToLower和字符串相等运算符)都支持。

    一般来说,您无法从代码中控制 EF 查询的字符串比较,因为它们是由数据库控制的。

    【讨论】:

      猜你喜欢
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多