2

我有一个查询,其中包含一个如下所示的字符串:。当我将其放入硬编码的查询中时,它会返回结果,而作为变量则不会。

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);
}    

不工作。

我的猜测是它与反斜杠有关,但我无法回答。

我找到了有同样问题的人,但我无法从中找到解决方案。

我究竟做错了什么?

[编辑]

更新了错字变量名称。

account.Replace("\\", "\\\\");

如果我像这样替换它,它就可以工作。虽然看起来很丑。。

[解决] 所以我从会话中得到的帐户字符串已经被转义了。我决定在会话创建时替换反斜杠以保持数据库一致,而不是一个带有双反斜杠和一个带有单反斜杠。

4

2 回答 2

3

有时您必须意识到您正在查看的内容可能已被 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"
}
于 2013-06-03T08:07:18.330 回答
1

您的第一个错误:您使用帐户变量而不是帐户 ID 进行过滤。

也许它表现为转义字符,请尝试使用逐字字符串:

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 );
于 2013-06-03T07:33:59.423 回答