我有一个关于分组和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>)吗?
如果您有一个IGrouping<GroupItem, ListItem>,并且您希望在不使用foreach循环的情况下访问该组的ListItem类型的项,这是非常简单的。类型为IGrouping<GroupItem, ListItem>的对象也是类型为IEnumerable<ListItem>的对象,因为它被定义为:
public interface IGrouping<out TKey, out TElement> : IEnumerable<TElement>, IEnumerable
所以你可以简单地说:
foreach (IGrouping<GroupItem, ListItem> group in list.GroupBy(x => x.ID))
{
IEnumerable<ListItem> itemsInThisGroup = group;
// ...
}
如果由于某种原因,它必须是List<T>而不是IEnumerable<T>,当然您仍然可以调用itemsInThisGroup.ToList()。但通常情况下,如果没有必要,最好不要这样做。