为了账号安全,请及时绑定邮箱和手机立即绑定

在C#.NET中将两个(或多个)列表合并为一个

在C#.NET中将两个(或多个)列表合并为一个

慕妹3242003 2019-11-12 09:19:10
是否可以使用C#在.NET中将两个或多个列表转换为一个列表?例如,public static List<Product> GetAllProducts(int categoryId){ .... }...var productCollection1 = GetAllProducts(CategoryId1);var productCollection2 = GetAllProducts(CategoryId2);var productCollection3 = GetAllProducts(CategoryId3);
查看完整描述

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>。)


除非您确实需要,否则我不会采用这种方法。


查看完整回答
反对 回复 2019-11-12
?
智慧大石

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的产品的列表,那么您需要的是串联,正如其他人指出的那样。


查看完整回答
反对 回复 2019-11-12
?
繁星coding

TA贡献1797条经验 获得超4个赞

您可以使用LINQ将它们结合起来:


  list = list1.Concat(list2).Concat(list3).ToList();

不过,较传统的使用方法List.AddRange()可能会更有效。


查看完整回答
反对 回复 2019-11-12
  • 3 回答
  • 0 关注
  • 2355 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信