【问题标题】:== by default is case insensitive in c# linq== 默认情况下在 c# linq 中不区分大小写
【发布时间】:2017-02-01 07:35:57
【问题描述】:

我不明白为什么:

在 db 中,我在 Members 表中有 Name = "Bob" 的记录

var a = await repository.Members.FirstOrDefaultAsync(x => x.Name == "BOB"); //is true (Entity Framework Core)

var c = repository.Members.FirstOrDefault(x => x.Name == "BOB"); //is true (LINQ)

var b = "Bob" == "BOB"; //is false

【问题讨论】:

  • 这不是“在 LINQ 中” - 它是“在您正在使用的特定 LINQ 提供程序中,针对您正在使用的特定数据库”。
  • 这是一个 SQL 比较,而不是 LINQ。敏感度由列的排序规则控制。

标签: c# sql sql-server linq


【解决方案1】:

问题与 LINQ 无关。 LINQ 只是一种抽象机制,允许您使用相同的语法查询不同的数据源。如果您默认使用 MSSQL,它将具有不区分大小写的 SQL_Latin1_General_CP1_CI_AS 排序规则(注意名称中的 CI)。因此,当您的 LINQ 查询被转换为 SQL (select * from Members where Name = 'BOB') 并运行时,它将返回结果。因此,基本上,如果您想使用它执行区分大小写的查找,您可能需要将 SQL Server 数据库的change the collation 设置为区分大小写的数据库。

【讨论】:

  • 作为旁注,根据标记的重复问题,更改所查询列的排序规则就足够了,而不是更改整个数据库的排序规则。
猜你喜欢
  • 2019-05-22
  • 1970-01-01
  • 2015-08-31
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多