Если вы ищете каждую комбинацию, используйте вместо нее SelectMany
, обычно с несколькими предложениями "from":
return from p1 in patterns1
from p2 in patterns2
let combination = p1.Concat(p2)
where combination.Sum() <= stockLen
select combination;
Это без какого-либо параллелизма, хотя ... в зависимости от ожидаемых коллекций, я бы просто распараллелил бы на одном уровне, например
return from p1 in patterns1.AsParallel()
from p2 in patterns2
let combination = p1.Concat(p2)
where combination.Sum() <= stockLen
select combination;
Обратите внимание, что нет никакой гарантии в отношении порядка, в котором результаты соответствуют вышеприведенному, - вам нужно настроить его, если вы хотите исходный порядок.