предложение:
создайте временную таблицу и вставьте свои идентификаторы
выберите результат на стороне SQL
РЕДАКТИРОВАТЬ:
"Может Вы делаете это в LINQ? "
TL; DR:
да * но это уродливая работа, напишите SQL себя
*) зависит от того, что Вы имеете в виду «в» LINQ, потому что это не входит в сферу LINQ. Другими словами: выражение LINQ является одним слоем слишком абстрактным, но если вам случится иметь доступную для этого реализацию LINQ, вы можете использовать this в ваших операторах LINQ
в выражении LINQ на стороне у вас есть что-то вроде:
List<int> lst = new List<int>() { 1,2,3 };
List<int> result = someQueryable.Where(x=>lst.Contains(x.ID)).Select(x=>x.ID).ToList();
вопрос теперь такой: что происходит на стороне SQL (при условии, что запрашиваемые данные приводят нас к базе данных SQL)?
запрашиваемых провайдер (например, Entity Framework) каким-то образом должен перевести это в SQL, выполнить его и вернуться с результатом
, здесь будет место для изменения перевода ... например, 1026 *
исследовать дерево выражений относительно объекта, который является целью для вызова Contains (...), и если оно больше, чем просто несколько элементов, go для подхода временной таблицы ...
одно и то же выражение LINQ может быть переведено в различные команды SQL. Поставщик решает, как должен быть выполнен перевод.
Если ваш поставщик не поддерживает большие дела Содержит (...), вы, вероятно, испытаете низкую производительность ... хорошо, что обычно никто не заставляет вас использовать это так ... вы можете пропустить linq для запросов, оптимизированных для производительности, или вы можете написать расширение для провайдера самостоятельно, но тогда вы не на стороне "делать что-то с LINQ", а расширяете функциональность вашего провайдера LINQ
Если вы не разрабатываете большой масштабируемый продукт, который будет развернут для работы с различными БД-бэкэндами, это, как правило, не стоит усилий ... более простой способ go - написать sql самостоятельно и просто используйте опцию sql вашего соединения с БД