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

atc*_*way 3 c# dynamics-crm-2011

我测试了以下表达式来评估和比较(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"))
Run Code Online (Sandbox Code Playgroud)

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

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

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

希望不得不做以下几点忽略整体套管:

.Where(x => x.GetAttributeValue<string>("country").Equals("UnITed sTAtes", StringComparison.OrdinalIgnoreCase))
Run Code Online (Sandbox Code Playgroud)

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

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

Joe*_*orn 7

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

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