Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架&x27;s Where语句,结尾有空格_C#_Asp.net_Asp.net Mvc_Entity Framework_Asp.net Mvc 4 - Fatal编程技术网

C# 实体框架&x27;s 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语句从数据库检索数据,如果在字符串末尾添加空格,它总是返回数据,所以

.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")