x.GetAttributeValue("country").Equals("UNITED STATES")).Where(x => x.GetAttributeValue("country").Equals("uniteD sTates"" />

为什么string.Equals默认情况下不区分大小写?

1597 观看

3回复

11390 作者的声誉

我测试了以下表达式来评估和比较(2)字符串:

.Where(x => x.GetAttributeValue<string>("country").Equals("United States"))
.Where(x => x.GetAttributeValue<string>("country").Equals("UNITED STATES"))
.Where(x => x.GetAttributeValue<string>("country").Equals("uniteD sTates"))

注意:这些查询是为使用SDK中的CRM LINQ提供程序检索数据而构建的表达式。

价值x.GetAttributeValue<string>("country")是完全正确的United States。上面的所有表达都返回true。老实说,这对我很好,甚至很好,但似乎不适用于MSDN 文档string.Equals哪些状态:

此方法执行序数(区分大小写和文化不敏感)比较。

希望不得不做以下几点忽略整体外壳:

.Where(x => x.GetAttributeValue<string>("country").Equals("UnITed sTAtes", StringComparison.OrdinalIgnoreCase))

有趣的是,以上总是会回归false。对我来说,这是倒退的。默认实现不考虑区分大小写,并且显式赋值的StringComparison.OrdinalIgnoreCase行为类似于区分大小写,因此不匹配的确切United States

为什么这种行为反过来或者我误解了这个?

作者: atconway 的来源 发布者: 2014 年 4 月 17 日

回应 (3)


7

303413 作者的声誉

你在使用LINQ-To-Sql吗?如果是这样,该代码实际上构建了一个表达式树,然后将其转换为在Sql Server上运行的SQL语句。与大多数数据库引擎一样,Sql Server默认情况下不关心大小写。

如果这是Linq-To-Objects,我希望你得到不同的结果。

作者: Joel Coehoorn 发布者: 17.04.2014 08:07

-2

679 作者的声誉

你可以尝试使用

x.GetAttributeValue<string>("country") == "United States"

代替

x.GetAttributeValue<string>("country").Equals("United States")
作者: kiwixz 发布者: 17.04.2014 08:11

3

495 作者的声誉

决定

实际上,针对CRM上下文的所有LINQ表达式都由LINQ提供程序转换为QueryExpression。并且string.Equals过滤器在那里被定义为不区分大小写,因此您得到此结果。

关于你的尝试StringComparison.OrdinalIgnoreCase,IMO可能(并且我认为是)提供者不支持带有第二个参数的方法(我已经尝试过并且它不会返回其他比较类型所需的结果)。

作者: andriikulyk 发布者: 18.04.2014 09:53
32x32