Мне нужно выполнить итерацию по набору объектов (пусть это ID) и выполнить конкретный запрос для каждого из этих объектов. Например:
IEnumerable<int> ids = getIDs(); //[1,2,3,4...]
Сейчас у меня есть это решение:
DBEntities db = new DBEntities();
var results =
from a in db.TABLEA
join b in db.TABLEB on a.id equals b.id
join c in db.TABLEC on b.oid equals c.oid
where ids.Contains(c.id)
select a;
но имейте в виду, что список идентификаторов меньше, чем таблица, в которой я ищу. При этом решение выше кажется неэффективным, так как я ищу каждую запись таблицы против меньшего списка, когда мне хотелось наоборот. Я также не хочу перебирать список и выполнять запрос для одного элемента за раз.
В идеале я хотел бы что-то вроде этого:
DBEntities db = new DBEntities();
(some data structure) ids = getIDs();
var results =
from a in db.TABLEA
join b in db.TABLEB on a.id equals b.id
join c in db.TABLEC on b.oid equals c.oid
join i in ids on c.id equals i.id;
В приведенном выше коде (псевдо) код будет перебирать мои элементы списка в одном запросе, делая это в одном запросе и выполняя мой фильтр каждым элементом списка.
Это способ сделать это? Если да, то какова соответствующая структура данных для реализации этого решения? Если нет, какие альтернативы у меня есть?