Проблема, с которой вы сталкиваетесь, - это отложенное выполнение, вы должны быть в состоянии найти много информации об этом, но в основном ни один из кодов не выполняется, пока вы на самом деле не попытаетесь прочитать данные из IQueryable (преобразовать его в IEnumerable или Список или другие подобные операции). Это означает, что все это происходит после того, как foreach закончен, когда я установлен в окончательное значение.
Если я правильно помню, одну вещь, которую вы можете сделать, это инициализировать новую переменную внутри цикла for следующим образом:
foreach (int i in arr1)
{
int tmp = i;
query = query.Where(q => (q.f_id1 == tmp || q.f_id2 == tmp || q.f_id3 == tmp));
}
Помещая его в новую переменную, которая воссоздает каждый цикл, переменная не должна изменяться до выполнения IQueryable
.