如何使用LINQ将嵌套的list2列表合并为单个列表?
当然有更简洁的LINQ写法!
你之前用的Select只会把每个外层元素的list属性单独提取出来,得到的是一个IEnumerable<IList<list2>>(一堆子列表的集合),而不是把所有元素平铺成一个单一集合。这时候你需要用**SelectMany**——LINQ里专门用来扁平化嵌套集合的方法。
直接替换你的嵌套循环的写法如下:
var listWithAll = list.SelectMany(item => item.list).ToList();
简单解释下:
SelectMany会遍历外层集合的每一个item,然后取出每个item的list子集合;- 它会自动把所有子集合里的
list2元素合并成一个连续的IEnumerable<list2>序列; - 最后调用
ToList()就转换成你需要的List<list2>了,效果和你原来的嵌套循环完全一样。
如果之后需要对元素做过滤,比如只保留something不为空的list2对象,也可以直接追加Where条件:
var listWithAll = list.SelectMany(item => item.list) .Where(item2 => !string.IsNullOrEmpty(item2.something)) .ToList();
内容的提问来源于stack exchange,提问作者Joakim
相关产品推荐
相关产品推荐

