LINQ in Entity Framework 6 with large .Any()

Ian*_*ink 4 c# sql linq entity-framework entity-framework-6

我有一个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();
}
Run Code Online (Sandbox Code Playgroud)

它适用于少量的ID,但当达到数百时,我得到错误:

SQL语句的某些部分嵌套得太深.重写查询或将其分解为较小的查询.

如何让查询只返回传入的ID?我无法更改数据库:(

Mar*_*zek 8

Contains改为使用:

public IList<Audit> AuditsByIDs(List<int> ids)
{
    return _db.Audits
        .Include(p => p.User)
        .Where(p => ids.Contains(p.Id)).ToList();
}
Run Code Online (Sandbox Code Playgroud)

哪个应该转换为IN生成的SQL查询.

  • 谨防。如果列表足够大,Contains仍然会引发错误。 (2认同)