我有一个LINQ查询,返回IEnumerable<List<int>>,但是我只想返回List<int>,所以我想将我在IEnumerable<List<int>>中的所有记录合并到一个数组中。

示例:

IEnumerable<List<int>> iList = from number in
    (from no in Method() select no) select number;


我想将我所有的结果IEnumerable<List<int>>只带到一个List<int>

因此,来自源数组:
[1,2,3,4]和[5 ,6,7]

我只需要一个数组
[1,2,3,4,5,6,7]

感谢

#1 楼

尝试SelectMany()

var result = iList.SelectMany( i => i );


评论


谢谢,我总是忘记了它-我知道它在那里,但是每次我需要使用它时,我都会花太多时间在Google上搜索。收藏这个答案。 :-)

– BrainSlugs83
2013年12月19日在18:51

有一段时间,我担心自己是唯一需要此服务的人。谢谢迈克!

– Arnab Chakraborty
15年4月14日在8:52

SelectMany(i => i)是否有一些替代语法?我已经看到这种语法使用了很多,但是似乎对select功能的使用已经退化,因此我希望语言设计人员能够专门针对列表列表使用一种快捷语法。

–安迪
17年2月9日在12:15

#2 楼

使用查询语法:

var values =
from inner in outer
from value in inner
select value;


评论


感谢我一直在寻找的确切语法,所以有这么多的答案列出了其他更详细的内容。

– SilverSideDown
2014年2月4日在21:19

这比SelectMany好得多。更清楚地了解IMO的情况,感谢您指出这一点!

–布莱恩·雷纳(Bryan Rayner)
16年9月14日在15:49

我个人总是发现查询语法版本比方法调用版本更不直观。当Resharper提供将循环转换为LINQ表达式时,如果它为我提供了查询语法,我将始终撤消。

–bikeman868
16-09-23在23:50

#3 楼

iList.SelectMany(x => x).ToArray()


评论


@recursive其他所有人都错过了什么? .ToArray()? -这是一种情况-如果您只需要迭代一次-或者项目可能会更改,那么.ToArray()绝对不是您想要的。但是对于要多次枚举的静态项,.ToList()或.ToArray()会提高性能(以稍微更高的内存使用为代价,通常这是相当不错的)。

– BrainSlugs83
2013年12月19日在18:55

大概在这种情况下,情况需要数组,因为在问题中已指定了数组。

–递归
2013年12月19日在21:49

@recursive,如果我们挑剔,OP表示他需要返回List ,因此.ToList()将是正确的选择。

– MEMark
14年2月26日在16:48

@MEMark OP还声明“仅一个数组”

– StefanJanssen
19年2月26日在11:16

#4 楼

这样吗?

var iList = Method().SelectMany(n => n);


#5 楼

如果您有List<List<int>> k,可以执行

List<int> flatList= k.SelectMany( v => v).ToList();