2

我在 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;

等等

4

3 回答 3

8

我想避免用诸如...之类的东西填充我的 for 循环

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

于 2013-07-15T17:34:09.027 回答
5

我不知道这会解决您的问题,但您可以尝试将 for 循环更改为 for each 循环,以便您可以引用当前对象,而不是通过索引访问它。问题是 SQL Server 不知道数组是什么,因此当您尝试使用有效的 C# 语法时,它不知道如何将其转换为表达式树以生成必要的 SQL。如果 for each 建议不起作用,那么我认为您会按照现在的方式进行操作。

于 2013-07-15T17:35:58.440 回答
0

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

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

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

于 2013-07-15T18:17:09.047 回答