查询变量中的EF双斜杠参数未给出任何结果

时间:2013-06-03 07:30:00

标签: c# entity-framework

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

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("\\", "\\\\");

如果我这样替换它就可以了。 虽然看起来很丑..

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

2 个答案:

答案 0 :(得分: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";

答案 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 );