【发布时间】:2013-12-13 18:21:09
【问题描述】:
我有一个包含大量项目的列表 - 最多 10,000 个。
我正在寻找从 IQueryable/List 中排除这些的最有效方法。
由于获取此 Id 列表所涉及的过程很复杂,因此不可能在查询中执行此操作。
下面的示例具有极高的开销,想知道是否有人能够解释其可能的原因以及是否有更好的方法来实现这一点?
results = from q1 in results
where excludedRecords.All(x => x != q1.ItemId)
select q1;
【问题讨论】:
-
结果中有多少项?排除记录中有多少。 excludeRecords 是什么类型的?
-
LINQ 最终归结为一个 for 循环(在我的理解中)。我想可能有办法通过限制您循环的项目数量来优化这一点。顺便说一句,“不可能在查询中执行此操作”——也许不是在单个查询中,但我觉得必须有一种方法可以使用 SQL 来帮助您。考虑到这一点,也许寻找和测试查询方法可能是值得的?
-
@drew_w 这个评论是错误的。 Linq 不会“归结为 for 循环”
-
@Hogan 根据this stack,LINQ lambda 被编译为一个函数,然后将其扩展为适当的循环语法(IEnumerable 最终也解析为循环)。我对这个的理解不正确吗?
-
据我了解,人们喜欢 LINQ 的原因是为了可读性,以及因为在访问变量之前不会调用已编译的 lambda。
标签: linq linq-to-entities