传递参数给 LINQ 查询

问题描述 投票:0回答:2

我有如下方法:

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

解决方案是什么?

c# asp.net-mvc linq entity-framework-5
2个回答
0
投票

作为变通方法,我使用 Dynamic Linq。 下面的代码对我有用。

public void GetUserIdByCode(string userCode)
{
    string clause = String.Format("Code=\"{0}\"", userCode);

    var userId = db.Users
                        .Where(clause)
                        .Select(u => u.Id)
                        .FirstOrDefault();    
}

数据库查询返回一个

User
的对象,以
Code
Id
为属性。这是在我的一个课程中定义的。


-1
投票

这里是将参数传递给 LINQ 查询的语法。

不确定这么多年后会有多少人搜索这个主题,但这里有一个代码示例可以完成这项工作:

string cuties = "777";
    
    // string collection
    IList<string> stringList = new List<string>() { 
        "eg. 1",
        "ie LAMBDA",
        "777"
    };
    
    var result = from s in stringList
                where (s == cuties) 
                select s;
    
    foreach (var str in result)
    {
        Console.WriteLine(str); // Output: "777"
    }
© www.soinside.com 2019 - 2024. All rights reserved.