Linq to Sql不区分大小写

我正在读Linq to Sql字符串比较的矛盾解释。

当我做到以下几点时:

  from p in db.People 
  where p.UserName=username
  select p

用户名=“约翰”

我得到正确的大小写不敏感的结果。 Linq是默认执行此操作还是发生在SQL数据库中?


我认为你根据你的数据库变量指向的内容和实际执行比较的地方得到了相互冲突的结果。 如果可以的话,linq将构建查询并将其发送到SQL服务器。 看起来你可以通过调用强制忽略大小写

where p.UserName.ToLower()=username.ToLower()

您的示例查询将转换为大致如下所示的内容:

从[schema]中选择[t0] .col1,[t0] .col2,...,[t0] .coln。[People]其中[t0] .UserName = @ p0

...用户名变量中的值将传递给@ p0 sql变量。 因此,区分大小写,区分重音等由您设置要使用的SQL Server实例/ db / table /列的排序规则控制。 如果没有在其他地方指定,则使用DB或数据库实例的默认排序规则,但可以一直指定列级别的排序规则。

大多数人使用不区分大小写(CI)的排序规则来运行SQL Server,但正如我上面所说的那样,它可以在数据库中被覆盖,所以您只需要检查您在那里的排序规则。

这与如果您做L2O(linq to objects)查询的操作相同,在这种情况下,case-sensitivity是默认值,您必须使用string.equals重写使其不区分大小写指定文化和/或不区分大小写......


这取决于数据库。 SQL Server 2008将字符串视为不区分大小写,包括在索引表达式中使用时。 Linq不这样做。

阅读MSDN或本文。

链接地址: http://www.djcxy.com/p/75183.html

上一篇: Linq to Sql case insensitive equality

下一篇: Case insensitive string comparison C++