Eu já comentei, mas ainda acho que é uma opção válida, apenas teste se no seu ambiente é melhor uma solução ou outra. No meu caso particular, o uso source.ForEach(p => dest.Add(p))
é melhor que o clássico, AddRange
mas não investiguei o porquê no nível baixo.
Você pode ver um código de exemplo aqui: https://gist.github.com/mcliment/4690433
Portanto, a opção seria:
var allProducts = new List<Product>(productCollection1.Count +
productCollection2.Count +
productCollection3.Count);
productCollection1.ForEach(p => allProducts.Add(p));
productCollection2.ForEach(p => allProducts.Add(p));
productCollection3.ForEach(p => allProducts.Add(p));
Teste para ver se funciona para você.
Isenção de responsabilidade : não estou advogando por esta solução, acho Concat
a mais clara. Acabei de afirmar - na minha discussão com Jon - que, na minha máquina, esse caso tem um desempenho melhor do que AddRange
, mas ele diz, com muito mais conhecimento do que eu, que isso não faz sentido. Existe a essência se você quiser comparar.