我有一个 EF6 查询,它获取 ID 列表并执行查询:
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 语句的某些部分嵌套得太深。 重写 查询或将其分解为较小的查询。
如何让查询仅在传入的 id 时才返回?我无法更改数据库:(
改用Contains
:
public IList<Audit> AuditsByIDs(List<int> ids)
{
return _db.Audits
.Include(p => p.User)
.Where(p => ids.Contains(p.Id)).ToList();
}
这应该在生成的 SQL 查询中转换为IN
。