Если базовая структура данных имеет индексацию, вы, вероятно, лучше делать это с двумя запросами, в любом случае, потому что он будет использовать индексы для получения элементов соответствия. Если вы спрашиваете о том, как сделать это одной строкой, вы всегда можете объединить результаты, используя Concat
.
В противном случае, если у вас есть изучить каждый пункт, единственный способ, которым я могу думать по-прежнему использовать LINQ и сделать только один проход через следующий (непроверенные и потенциально опасным):
int zeroesTaken = 0;
IEnumerable<Agent> agents = from a in builtAgents
where a.OptimPriority == 1
|| (a.OptimPriority == 0 && ++zeroesTaken <= 5)
select a;
Скорее уродливый и опасный, так как вы, конечно же, должны быть уверены, что не дотрагиваетесь до zeroesTaken
в любом месте, пока после запроса не запустится. И Я не уверен, что это действительно сработает, если запрос нужно запустить более одного раза!
Я чувствую себя лучше, герметизирующий все это в способе, который перебирает каждый элемент в builtAgents
и yield return
сек спичек ...