【发布时间】:2014-03-07 01:29:51
【问题描述】:
我有一个 EF6 查询,它采用 IDs 列表并执行查询:
public IList<Audit> AuditsByIDs(List<int> ids)
{
return _db.Audits
.Include(p => p.User)
.Where(p => ids.Any(i => i == p.Id)).ToList();
}
它适用于 少量 id,但当达到数百个时,我会收到错误:
您的 SQL 语句的某些部分嵌套得太深。重写 查询或将其分解为更小的查询。
如何让查询仅在 ids 传入后才返回?我无法更改数据库:(
【问题讨论】:
-
如果可能的话,我会使用 Intersect,但它似乎不是 :( 你能告诉我们生成的 SQL 吗?
-
对于通过 ID 搜索的大型数据结构,您更喜欢一些索引结构,如 HashSet
或 Dictionary ,会快得多。 -
@Some1Pr0 不,它不会。它是 LINQ to Entities,无论如何它都已转换为
IN (item1, item2, ...)作为 SQL 查询的一部分。
标签: c# sql linq entity-framework entity-framework-6