3 回答
TA贡献1900条经验 获得超5个赞
您可以使用LINQ Concat和ToList方法:
var allProducts = productCollection1.Concat(productCollection2)
.Concat(productCollection3)
.ToList();
请注意,有更有效的方法可以执行此操作-上面的操作基本上会遍历所有条目,从而创建动态大小的缓冲区。正如您可以预测的开始大小一样,您不需要此动态大小调整...因此您可以使用:
var allProducts = new List<Product>(productCollection1.Count +
productCollection2.Count +
productCollection3.Count);
allProducts.AddRange(productCollection1);
allProducts.AddRange(productCollection2);
allProducts.AddRange(productCollection3);
(为了提高效率AddRange而特例ICollection<T>。)
除非您确实需要,否则我不会采用这种方法。
TA贡献1946条经验 获得超3个赞
假设您想要一个包含指定类别ID的所有产品的列表,则可以将查询视为投影,然后进行展平操作。还有,做一个LINQ经营者:SelectMany。
// implicitly List<Product>
var products = new[] { CategoryId1, CategoryId2, CategoryId3 }
.SelectMany(id => GetAllProducts(id))
.ToList();
在C#4中,可以将SelectMany缩短为: .SelectMany(GetAllProducts)
如果您已经有代表每个ID的产品的列表,那么您需要的是串联,正如其他人指出的那样。
TA贡献1797条经验 获得超4个赞
您可以使用LINQ将它们结合起来:
list = list1.Concat(list2).Concat(list3).ToList();
不过,较传统的使用方法List.AddRange()可能会更有效。
- 3 回答
- 0 关注
- 2355 浏览
添加回答
举报