我有一个关于IGrouping
和Select()
方法的问题。
假设我有一个这样的IEnumerable<IGrouping<int, smth>>
:
var groups = list.GroupBy(x => x.ID);
其中list
是一个List<smth>
。
现在我需要以某种方式将每个IGrouping
的值传递给另一个列表:
foreach (var v in structure)
{
v.ListOfSmth = groups.Select(...); // <- ???
}
在这种情况下,有人能建议如何从IGrouping<int, smth>
中获取值(List<smth>
)吗?
发布于 2011-12-15 21:56:13
由于IGrouping<TKey, TElement>
实现了IEnumerable<TElement>
,因此您可以使用SelectMany
将所有IEnumerables
放回一个IEnumerable
中:
List<smth> list = new List<smth>();
IEnumerable<IGrouping<int, smth>> groups = list.GroupBy(x => x.id);
IEnumerable<smth> smths = groups.SelectMany(group => group);
List<smth> newList = smths.ToList();
下面是一个构建/运行的示例:https://dotnetfiddle.net/DyuaaP
此解决方案的视频评论:https://youtu.be/6BsU1n1KTdo
发布于 2011-12-15 21:52:48
foreach (var v in structure)
{
var group = groups.Single(g => g.Key == v. ??? );
v.ListOfSmth = group.ToList();
}
首先,您需要选择所需的组。然后,您可以在组上使用的ToList
方法。IGrouping
是这些值的IEnumerable
。
发布于 2015-05-25 05:16:36
上述答案的更清晰版本:
IEnumerable<IGrouping<int, ClassA>> groups = list.GroupBy(x => x.PropertyIntOfClassA);
foreach (var groupingByClassA in groups)
{
int propertyIntOfClassA = groupingByClassA.Key;
//iterating through values
foreach (var classA in groupingByClassA)
{
int key = classA.PropertyIntOfClassA;
}
}
https://stackoverflow.com/questions/8521025
复制相似问题