实体框架的Where语句末尾有空格

时间:2016-01-22 10:04:22

标签: c# asp.net asp.net-mvc entity-framework asp.net-mvc-4

我正在尝试使用Where语句从数据库中检索数据,并且如果在字符串的末尾添加了空格,它总是返回数据,所以

.Where(p => p.Username == "sysadmin")

.Where(p => p.Username == "sysadmin      ")

两者都返回数据(我希望第二个返回null)。同样的事情是使用WebSecurity.Login方法,它在两种情况下都成功登录。

1 个答案:

答案 0 :(得分:3)

reason为什么这样做是:

  

SQL Server遵循ANSI / ISO SQL-92规范(第8.2节,   关于如何将字符串与空格进行比较的一般规则#3)。 ANSI   标准要求填充使用的字符串   比较,以便在比较它们之前它们的长度匹配。该   padding直接影响WHERE和HAVING子句的语义   谓词和其他Transact-SQL字符串比较。例如,   Transact-SQL考虑字符串' abc'和' abc'相当于   对于大多数比较操作。

     

此规则的唯一例外是LIKE谓词。当正确的时候   LIKE谓词表达式的一侧具有带尾随的值   空间,SQL Server不会将这两个值填充到相同的长度   在比较之前。因为喜欢的目的   根据定义,谓词是为了促进模式搜索   比简单的字符串相等测试,这不违反该部分   前面提到的ANSI SQL-92规范。

您可以尝试执行以下操作:

.Where(p => p.Username.Trim() == "sysadmin")