c# - 如何从IGrouping中获取值
转载:https://www.itranslater.com/qa/details/2125804226692514816
我有关于IGrouping和Select()方法的问题。
可以说我用这种方式得到了List<smth>
:
var groups = list.GroupBy(x => x.ID);
列表是List<smth>
。
现在我需要以某种方式将每个List<smth>
的值传递给另一个列表:
foreach (var v in structure)
{
v.ListOfSmth = groups.Select(...); // <- ???
}
在这种情况下,有人可以建议如何从IGrouping<int, smth>
获得价值(List<smth>
)吗?
213 votes
自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();
27 votes
foreach (var v in structure)
{
var group = groups.Single(g => g.Key == v. ??? );
v.ListOfSmth = group.ToList();
}
首先,您需要选择所需的组。 然后你可以使用组中的ToList
方法。 IGrouping
是一个IEnumerable
的价值观。
11 votes
从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
}
9 votes
上述答案的更明确版本:
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;
}
}
Bronek answered
2019-04-25T22:51:52Z
关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
Copyright(c)2025 TNBLOG All Rights Reserved