К сожалению, SQL Server не может обработать список параметров, который превышает 2100 параметров. У меня есть несколько запросов, которые при запуске в пакетном режиме превышают этот предел. Чтобы получить желаемые результаты и быстро просмотреть набор данных, я решил использовать Skip(i).Take(2000)
в цикле for.
Я не был готов к тому, что Union
и Concat
требуют, чтобы IEnumerable
был больше, чем просто экземпляр для работы. Конечно, он пустой, но я, должно быть, упускаю что-то фундаментальное в их использовании. В любом случае, чтобы решить проблему, я использовал List и AddRange
. Я использую NHibernate, но не думаю, что факторы, почему Union
и Concat
не работают.
var machineResults = new List<Machine>();
for (int i = 0; i < machines.Count(); i += 2000)
{
// I would have expected Union or Concat to work here
machineResults.AddRange(GetSession().CreateQuery(
@"select distinct m
from Machine m
where m in (:MachinesList)") // there's more criteria than this
.SetParameterList("MachinesList",
machines.Skip(i).Take(2000).ToList())
.List<Machine>());
}
return machineResults;
Так что же мне не хватает в Union
и Concat
? Почему они не работают в приведенном выше заявлении? Я понимаю, почему AddRange работает, но что, если я был обеспокоен уникальностью своих результатов и хотел использовать Union
?