我在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;
等
答案 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。