我有一个查询,其中包含如下所示的字符串: 。 当我将其放入硬编码的查询中时,它确实返回结果,但作为变量则不会。
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("\\", "\\\\");
如果我像这样替换它,它就可以工作。 虽然看起来很丑..
[解决办法] 所以我从 session 中获得的帐户字符串已经被转义了。我决定在 session 创建时替换反斜杠,以使数据库保持一致,而不是一个带有双反斜杠,一个带有单反斜杠。
最佳答案
有时,在调试时,您必须意识到您所看到的内容可能已被 IDE 在视觉上更改,例如,在 Visual Studio 中查看文件路径时您可能会感到困惑。其中字符串“c:\something\file.bla”
可以显示为“c:\\something\\file.bla”
这也发生在连接字符串和其他事物中。
在你的情况下@"domain\\user"
实际上是"domain\\user"
而如果您不使用逐字字符串
查询数据库时,“domain\\user”
将是 “domain\user”
。
用途:
string accountid = @"domain\user"
或者
string accountid = "domain\\user"
第二点: 变量前面的@用于允许您使用保留字作为变量名。 像这样:
string @class = "1st. class";
或者
bool @if = true;
if(@if)
{
Console.WriteLine("If is: "+ @if); //would print "If is: true"
}
关于c# - 查询变量中的 EF 双斜杠参数未给出任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16891936/