Gab*_*Gab 5 c# asp.net asp.net-mvc entity-framework asp.net-mvc-4
我正在尝试使用Where语句从数据库中检索数据,如果在字符串末尾添加空格,它总是返回数据,所以
.Where(p => p.Username == "sysadmin")
Run Code Online (Sandbox Code Playgroud)
和
.Where(p => p.Username == "sysadmin ")
Run Code Online (Sandbox Code Playgroud)
两者都返回数据(我希望第二个返回 null)。方法也是一样WebSecurity.Login
,两种情况下都成功登录。
这样做的原因是:
SQL Server 遵循有关如何将字符串与空格进行比较的 ANSI/ISO SQL-92 规范(第 8.2 节,一般规则 #3)。ANSI 标准要求对比较中使用的字符串进行填充,以便在比较之前它们的长度匹配。填充直接影响 WHERE 和 HAVING 子句谓词以及其他 Transact-SQL 字符串比较的语义。例如,对于大多数比较操作,Transact-SQL 认为字符串 'abc' 和 'abc ' 是等效的。
此规则的唯一例外是 LIKE 谓词。当 LIKE 谓词表达式右侧的值带有尾随空格时,SQL Server 在比较发生之前不会将两个值填充到相同的长度。因为根据定义,LIKE 谓词的目的是促进模式搜索而不是简单的字符串相等性测试,因此这并不违反前面提到的 ANSI SQL-92 规范的部分。
您可以尝试这样做:
.Where(p => p.Username.Trim() == "sysadmin")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2035 次 |
最近记录: |