from f in CUSTOMERS
where depts.Contains(f.DEPT_ID)
select f.NAME
depts
— это список (IEnumerable<int>
) идентификаторов отделов.
Этот запрос работает нормально, пока вы не передадите большой список (скажем, около 3000 идентификаторов отделов). Затем я получаю эту ошибку:
Неверный поток протокола удаленного вызова процедур (RPC) входящего потока табличных данных (TDS). В этом запросе RPC указано слишком много параметров. Максимум 2100.
Я изменил свой запрос на:
var dept_ids = string.Join(" ", depts.ToStringArray());
from f in CUSTOMERS
where dept_ids.IndexOf(Convert.ToString(f.DEPT_id)) != -1
select f.NAME
использование IndexOf()
исправило ошибку, но сделало запрос медленным. Есть ли другой способ решить эту проблему? Спасибо.
contain
, если у меня есть различные параметры от 1 до 2000? Я знаю, что это создает кучу планов в БД, но кажется, что использованиеlike <input parameter> '%<search field>%'
займет еще больше времени ресурсов БД. Что я должен использовать? - person Johnny_D   schedule 15.10.2013DEPT_id
, когда он равен 1, будет найден любой идентификатор, имеющий 1 в любой цифре! Я что-то упускаю? - person A.Akram   schedule 17.09.2017