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