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

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,两种情况下都成功登录。

Rah*_*thi 5

这样做的原因是:

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)