如何从IGrouping获取值
我有一个关于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(...); // <- ??? }
任何人都可以build议如何从IGrouping<int, smth>
在这样的上下文中获取值( List<smth>
)?
由于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();
foreach (var v in structure) { var group = groups.Single(g => g.Key == v. ??? ); v.ListOfSmth = group.ToList(); }
首先,您需要select所需的组。 那么你可以使用组的ToList
方法。 IGrouping
是一个IEnumerable
的值。
从IGrouping的定义:
IGrouping<out TKey, out TElement> : IEnumerable<TElement>, IEnumerable
你可以遍历像这样的元素:
IEnumerable<IGrouping<int, smth>> groups = list.GroupBy(x => x.ID) foreach(IEnumerable<smth> element in groups) { //do something }
上述答案的更多澄清版本:
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; } }