繁体   English   中英

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

[英]LINQ query with array element in Where clause

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

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

问题是LINQ不喜欢与数组元素进行比较,并向实体抛出LINQ异常,无法识别方法'get_Item(Int32)'。 除了在我要选择的团队列表中为每个属性声明局部变量之外,还有更好的方法来解决此问题吗? 我想避免在for循环中填充类似的内容

int departmentID = teams[i].DepartmentID;
string teamName = teams[i].TeamName;

等等

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

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

我不知道这可以解决您的问题,但是您可以尝试将for循环更改为for for每个循环,以便您可以引用当前对象,而不是通过索引访问它。 问题是SQL Server没有关于数组是什么的概念,因此当您尝试使用有效的C#语法时,它不知道如何将其转换为表达式树以生成必要的SQL。 如果每个建议的都行不通,那么我认为您现在就坚持这样做。

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

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

可以轻松地将其转换为表达式树,最后转换为SQL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM