LINQ в Entity Framework 6 с большим .Any ()

c# entity-framework entity-framework-6 linq sql

Вопрос

У меня есть запрос EF6, который принимает список идентификаторов и выполняет запрос:

public IList<Audit> AuditsByIDs(List<int> ids)
{
    return _db.Audits
        .Include(p => p.User)
        .Where(p => ids.Any(i => i == p.Id)).ToList();
}

Он работает для небольшого количества идентификаторов , но когда это доходит до сотен, я получаю сообщение об ошибке:

Некоторая часть вашего оператора SQL слишком сложна. Перепишите запрос или разделите его на более мелкие запросы.

Как мне вернуть запрос только тогда, когда идентификаторы прошли? Я не могу изменить базу данных :(

Принятый ответ

Вместо этого используйте Contains :

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

Который должен быть преобразован в IN в сгенерированном SQL-запросе.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему