У меня есть объект Person, у которого есть список мест, связанных с ним. Мне нужно запросить таблицу лиц и получить все те, у которых есть хотя бы одно местоположение из списка мест (критериев). Следующие работы но очень неэффективны:
var searchIds = new List<int>{1,2,3,4,5};
var result = persons.Where(p => p.Locations.Any(l => searchIds.Any(id => l.Id == id)));
Это отлично подходит для небольших списков (скажем, 5-10 поисковых запросов и человека с 5-10 местами. Проблема заключается в том, что у некоторых людей может быть 100 мест, а поиск также может быть в 100 местах одновременно. выполнить вышеописанный EF фактически создал SQL-запрос 2000+ и завершился неудачно, потому что он слишком глубоко вложен. В то время как вложенность уже сама по себе является проблемой, даже если бы это сработало, мне все равно не было бы очень повезло бы с SQL-запросом 2000+.
Примечание: реальный код также включает в себя несколько уровней и отношения родитель-потомок, но мне удалось получить его до этой довольно плоской структуры, используя только id, а не полные объекты
Каким будет лучший способ выполнить это в EF?