代码之家  ›  专栏  ›  技术社区  ›  kudlatiger

如何在实体框架中异步筛选数据-无法访问静态成员“等于”[重复]

  •  0
  • kudlatiger  · 技术社区  · 5 年前

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

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

    0 回复  |  直到 8 年前
        1
  •  11
  •   Kishore Kumar    4 年前

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

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

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