Nic*_*ick 5 c# entity-framework string-comparison
我正在使用Entity Framework查询表.第一部分代码是我写的,第二部分是ReSharper建议我也重构它.如果密钥不存在,第一个优雅地返回null,但第二个抛出异常.
尝试使用表中的0-1记录(所有列都标记为NOT NULL)
有效的代码:
context.brandlink.FirstOrDefault(x => x.ManufacturerKey.ToLower() == manufacturerKey.ToLower());
Run Code Online (Sandbox Code Playgroud)
和不起作用的代码:
context.brandlink.FirstOrDefault(x => String.Equals(x.ManufacturerKey, manufacturerKey, StringComparison.InvariantCultureIgnoreCase));
Run Code Online (Sandbox Code Playgroud)
抛出异常:
为调用方法'Boolean Equals(System.String,System.String,System.StringComparison)提供的参数数量不正确
所以我的问题是:这两个表达式有什么区别?
所以我的问题是:这两个表达式有什么区别?
差异是后者使用CLR String.Equals方法(String,String,StringComparison),根据CLR方法对Canonical Function Mapping不支持EF,而前者(string.ToLower
和字符串相等运算符)中使用的所有方法都是支持的.
通常,您无法控制代码中EF查询的sting比较,因为它们由数据库控制.
归档时间: |
|
查看次数: |
1426 次 |
最近记录: |