以防万一您想知道这是如何产生的,我正在使用来自 Entity Framework 的一些结果集。
我有一个对象是IEnumerable<IEnumerable<string>>
; 基本上,一个字符串列表的列表。
我想将所有字符串列表合并到一个大字符串列表中。
在 C#.net 中执行此操作的最佳方法是什么?
以防万一您想知道这是如何产生的,我正在使用来自 Entity Framework 的一些结果集。
我有一个对象是IEnumerable<IEnumerable<string>>
; 基本上,一个字符串列表的列表。
我想将所有字符串列表合并到一个大字符串列表中。
在 C#.net 中执行此操作的最佳方法是什么?
使用 LINQ SelectMany 方法:
IEnumerable<IEnumerable<string>> myOuterList = // some IEnumerable<IEnumerable<string>>...
IEnumerable<String> allMyStrings = myOuterList.SelectMany(sl => sl);
要非常清楚这里发生了什么(因为我讨厌人们认为这是某种巫术,我为其他人删除相同的答案而感到难过):
SelectMany是一个扩展方法(通过语法糖看起来像特定类型的实例方法的静态方法)IEnumerable<T>
。它需要您原始的枚举枚举和一个将其中的每个项目转换为枚举的函数。
因为这些项目已经是枚举,所以转换函数很简单——只需返回输入(sl => sl
意思是“取一个命名的参数sl
并返回它”)。SelectMany 然后依次提供对这些中的每一个的枚举,从而产生您的“扁平化”列表。
使用Concat
方法:
firstEnumerable.Concat(secondEnumerable)
使用SelectMany
将强制对您不需要的两个枚举的每个元素进行额外评估。