LINQ查询与Where子句中的数组元素

时间:2013-07-15 17:32:17

标签: c# .net linq entity-framework linq-to-entities

我在for循环中有很多LINQ查询,如下所示:

Department department = db.Departments.Single(d => d.DepartmentID == teams[i].DepartmentID);

问题是LINQ不喜欢与数组元素进行比较并抛出异常LINQ to Entities无法识别方法'get_Item(Int32)'。除了为我要选择的团队列表中的每个属性声明局部变量之外,还有更好的解决方法吗?我想避免用

之类的东西填充我的for循环
int departmentID = teams[i].DepartmentID;
string teamName = teams[i].TeamName;

3 个答案:

答案 0 :(得分:7)

  

我想避免用像......这样的东西填充我的for循环。

不幸的是,这通常是最好的选择。表达式求值需要能够将表​​达式树转换为SQL,并且它不知道如何处理数组元素。制作临时变量是处理这种情况的最简单,最易维护的方法。

答案 1 :(得分:5)

我不知道这会解决您的问题,但您可以尝试将for循环更改为每个循环,以便您可以引用当前对象而不是通过索引访问它。问题是,当您尝试使用有效的C#语法时,SQL Server不了解数组是什么,它不知道如何将其转换为表达式树以生成必要的SQL。如果对于每个建议都不起作用,那么我认为你现在已经陷入困境。

答案 2 :(得分:0)

你为什么不写那样的东西:

var query = from d in db.Departments
                from t in teams
                where d.DepartmentID == t.DepartmentID && d.Team == t.TeamName
                select d;

这可以很容易地转换为Expression树,最后转换为SQL。