【发布时间】:2014-08-23 08:36:49
【问题描述】:
我有一个方法如下:
public void GetUserIdByCode(string userCode)
{
var query = from u in db.Users
where u.Code == userCode // userCode = "LRAZAK"
select u.Id;
var userId = query.FirstOrDefault(); // userId = 0 :(
}
当我运行代码时,我得到了分配给 userId 的默认值 0,这意味着找不到 Id。 但是,如果我用下面的字符串更改 userCode,我会得到我想要的值。
public void GetUserIdByCode(string userCode)
{
var query = from u in db.Users
where u.Code == "LRAZAK" // Hard-coded string into the query
select u.Id;
var userId = query.FirstOrDefault(); // userId = 123 Happy days!!
}
我的问题是为什么将参数传递给 LINQ 查询不起作用? 当我进入代码时,我得到了这样的 SQL 语句:
// Does not work...
{SELECT "Extent1"."LOGONNO" AS "LOGONNO"FROM "DEBTORSLIVE"."DEBTORS_LOGONS" "Extent1"WHERE ("Extent1"."LOGONCODE" = :p__linq__0)}
硬编码的 LINQ 查询(有效的)给出如下 SQL 语句:
// Working just fine
{SELECT "Extent1"."LOGONNO" AS "LOGONNO"FROM "DEBTORSLIVE"."DEBTORS_LOGONS" "Extent1"WHERE ('LRAZAK' = "Extent1"."LOGONCODE")}
解决办法是什么?
【问题讨论】:
-
你能显示调用
GetUserIdByCode的代码吗? -
我怀疑该值不是实际上
LRAZAK- 我怀疑它在开头或结尾有空格,或类似的东西。 -
数据库中的u.Code是什么类型?
-
您应该尝试清理输入以确保
userCode字符串中没有任何奇怪的东西。 -
你检查过长度是6吗?考虑非打印字符...
标签: c# asp.net-mvc linq entity-framework-5