C# 实体框架&x27;s Where语句,结尾有空格
我尝试使用Where语句从数据库检索数据,如果在字符串末尾添加空格,它总是返回数据,所以C# 实体框架&x27;s Where语句,结尾有空格,c#,asp.net,asp.net-mvc,entity-framework,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,我尝试使用Where语句从数据库检索数据,如果在字符串末尾添加空格,它总是返回数据,所以 .Where(p => p.Username == "sysadmin") 及 两者都返回数据(我希望第二个返回null)。同样的事情发生在WebSecurity.Login方法上,它在这两种情况下都成功地登录了。它这样做的原因是: SQL Server遵循ANSI/ISO SQL-92规范(第8.2节, 关于如何比较字符串和空格的一般规则#3)。美国国家标准协会 标准要求对中使用的字符串进行填充
.Where(p => p.Username == "sysadmin")
及
两者都返回数据(我希望第二个返回null)。同样的事情发生在WebSecurity.Login方法上,它在这两种情况下都成功地登录了。它这样做的原因是:
SQL Server遵循ANSI/ISO SQL-92规范(第8.2节,
关于如何比较字符串和空格的一般规则#3)。美国国家标准协会
标准要求对中使用的字符串进行填充
进行比较,使其长度在比较之前匹配。这个
填充直接影响WHERE和HAVING子句的语义
谓词和其他Transact-SQL字符串比较。例如
Transact-SQL认为字符串“abc”和“abc”是等效的
对于大多数比较操作
此规则的唯一例外是LIKE谓词。什么时候合适
LIKE谓词表达式的侧面具有一个带有尾随符号的值
空间,SQL Server不会将这两个值填充到相同的长度
在比较发生之前。因为类似的目的
根据定义,谓词是为了方便模式搜索,而不是
与简单的字符串相等性测试相比,这并不违反
符合前面提到的ANSI SQL-92规范
您可以尝试执行以下操作:
.Where(p => p.Username.Trim() == "sysadmin")
只需使用p.Username.Trim()方法即可解决此问题。您可能需要添加一个检查,以确保字符串长度也匹配。有关.Trim()
方法及其到SQL的转换的更多信息:
.Where(p => p.Username.Trim() == "sysadmin")