在LINQ ASP.NET中引用嵌套lambda表达式中的参数时出错

本文关键字:表达式 参数 出错 lambda 嵌套 LINQ ASP NET 引用 | 更新日期: 2023-09-27 18:19:47

由于某些原因,我在Microsoft Visual Studio 2012中收到以下代码的错误:

students.Where(s => 
    foreignStudents.Any(f => 
        s.FirstName == f.FirstName && 
        s.LastName  == f.LastName
    )
);

student是具有包括FirstNameLastName的各种属性的学生的列表,而foreignStudents是仅包含学生的FirstNameLastName的列表。我已经更改了变量名,以便更容易理解这个问题。

它指出IEnumerable不包含"Any"的定义,并且最佳扩展方法重载Enumerable.Any<TSource>(IEnumerable<TSource>, Func<TSource,bool>)具有一些无效参数。

将其切换到f => truef => f.FirstName == "Sarah"将消除错误。

任何见解都将不胜感激!


编辑:实际代码

// Retreives orders from the database using parameters from the URL
string orderQuery = "SELECT * FROM EventOrders WHERE EventID = @0 AND AccountNum = @1";
var orders = db.Query(orderQuery, Request.Form["id"], Request.Form["accountnum"]);
// Parses order IDs from the URL
// Where Order IDs are in the form: <orderNum>-<orderLine>[,...]
var orderIDs = Request.QueryString["orderids"].Split(',')
    .Select(orderID => {
        var components = orderID.Split('-');
        return new { 
            OrderNum  = components[0].AsInt(), 
            OrderLine = components[1].AsInt() 
        };
    });
var quantityList = orders
    .Where(o => orderIDs.Any(i => o.OrderNum == i.OrderNum && o.OrderLine ==             i.OrderLine))
    .OrderByDescending(o => o.Quantity)
    .Select(o => new { o.OrderNum, o.OrderLine, o.Quantity })

编辑2:所以我认为这可能只是Visual Studio现在的问题。在调试完其余代码后,它似乎可以工作。Visual Studio仍然用红色下划线表示错误。

在LINQ ASP.NET中引用嵌套lambda表达式中的参数时出错

您真正想要做的是Join。通过连接这两个表,你可以找到一个表中的所有学生,而另一个表则存在。这也是一个可以比您所描述的更有效地完成的操作,在该操作中,您为每个项目搜索整个数据集。如果已知您正在进行Join,则可以对其进行大量优化。

var query = from student in students
            join foreignStudent in foreignStudents
                on new { student.FirstName, student.LastName }
                equals new { foreignStudent.FirstName, foreignStudent.LastName }
                into joinedStudents
            where joinedStudents.Count() > 0
            select student;