C# 如何减少IEnumerable<;IEnumerable<;Foo>&燃气轮机;到IEnumerable<;Foo>;?

C# 如何减少IEnumerable<;IEnumerable<;Foo>&燃气轮机;到IEnumerable<;Foo>;?,c#,linq,ienumerable,C#,Linq,Ienumerable,很抱歉,标题很奇怪。我试图实现的目标很简单: IEnumerable<IEnumerable<Foo>> listoflist; IEnumerable<Foo> combined = listoflist.CombineStuff(); 我肯定这有一个Linq表达式 旁注:列表可能很大 SelectMany() 好的就像莱皮说的,你想要的。最简单的形式是: combined = listOfList.SelectMany(x => x); co

很抱歉,标题很奇怪。我试图实现的目标很简单:

IEnumerable<IEnumerable<Foo>> listoflist;
IEnumerable<Foo> combined = listoflist.CombineStuff();
我肯定这有一个Linq表达式

旁注:列表可能很大

SelectMany()

好的

就像莱皮说的,你想要的。最简单的形式是:

 combined = listOfList.SelectMany(x => x);
 combined = from x in listOfList
            from y in x
            select y;
在查询表达式中,当有多个
from
子句时,将调用
SelectMany
,因此另一种方法是:

 combined = listOfList.SelectMany(x => x);
 combined = from x in listOfList
            from y in x
            select y;

我想知道为什么MS没有重载所有的扩展方法,不带任何参数,而是使用identity。猜测类型推断不会那么好用。是的,类型推断会变得棘手——至少是预协方差。在那之后,事情会简单一些。