我有一个方法像下面这样:
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")}
解决方案是什么?
2条答案
按热度按时间jucafojl1#
作为一种解决方法,我使用Dynamic Linq。下面的代码对我来说是有效的。
数据库查询返回一个
User
对象,它的属性为Code
和Id
,这是在我的一个类中定义的。42fyovps2#
下面是将参数传递给LINQ查询的语法。
不确定这么多年后会有多少人搜索这个主题,但下面的代码示例可以完成这项工作: