出于某种原因,我在Microsoft Visual Studio 2012中通过以下代码收到错误:
students.Where(s =>
foreignStudents.Any(f =>
s.FirstName == f.FirstName &&
s.LastName == f.LastName
)
);
student
是包含FirstName
和LastName
各种属性的学生列表,foreignStudents
是仅包含FirstName
和LastName
的列表} 学生的。我已经更改了变量名,以便更容易理解问题。
它表示IEnumerable不包含“Any”的定义,并且最佳扩展方法重载Enumerable.Any<TSource>(IEnumerable<TSource>, Func<TSource,bool>)
具有一些无效参数。
将其切换为f => true
或f => 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仍然以红色加下划线表示错误。
答案 0 :(得分:0)
你真正想做的是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;