我的查询包含一个如下所示的字符串:。 当我把它放入我的查询硬编码时,它会返回结果,而作为变量却没有。
var myresult = RepositoryQuery.Where(a => a.Account== @"domain\\user");
作品。
string account= "domain\\user";
var user = RepositoryQuery.Where(a => a.Account == account);
不起作用。
Account GetAccount(account){
return RepositoryQuery.Where(a => a.Account == account);
}
不起作用。
Account GetAccount(account){
return RepositoryQuery.Where(a => a.Account == @account);
}
不起作用。
我的猜测是它与反斜杠有关,但我无法回答。
我找到了同样problem的人,但我找不到解决办法。
我做错了什么?
[编辑]
更新了拼写错误名称。
account.Replace("\\", "\\\\");
如果我这样替换它就可以了。 虽然看起来很丑..
[解决] 因此,我从会话中获得的帐户字符串已被转义。我决定在会话创建时替换反斜杠以使数据库保持一致,而没有一个带有双反斜杠和一个带有单个反斜杠。
答案 0 :(得分:3)
在调试时,有时您必须知道您正在查看的内容可能会被IDE直观地更改,例如,在查看visual studio中的文件路径时,您可能会感到困惑。字符串“c:\something\file.bla"
可以显示为"c:\\something\\file.bla"
的位置
这也发生在连接字符串和其他事情中。
在您的情况下,@"domain\\user"
确实是"domain\\user"
而如果你不使用逐字字符串
1}}在查询数据库时会"domain\\user"
。
使用:
"domain\user"
或者
string accountid = @"domain\user"
关于第二点: 变量前面的@用于允许您使用保留字作为变量名。 类似的东西:
string accountid = "domain\\user"
或者
string @class = "1st. class";
答案 1 :(得分:1)
您的第一个错误:您使用帐户变量而不是accountid进行过滤。
也许它表现为转义字符,请尝试使用逐字字符串:
string accountid = @"domain\\user";
或者如果您使用单反斜杠存储它:
string accountid = @"domain\user";
我认为这可行:
string accountid = @"domain\user";
var user = RepositoryQuery.Where(a => a.Account == accountid );
或者这个(但我不建议):
string accountid = "domain\\user";
var user = RepositoryQuery.Where(a => a.Account == accountid );