如何迭代IGrouping <T>接口?

Exi*_*tos 51 c# linq

我有一个非常讨厌的问题,我已经分组了一组数据,我无法得到组内的数据.我可以得到关键位而不是数据..

我有一堆表格中的数据

Data.Period = x
Data.Adjustment = y
Run Code Online (Sandbox Code Playgroud)

我执行GroupBy

var groupedData = Data.GroupBy(x => x.Period new {x.Period});
Run Code Online (Sandbox Code Playgroud)

这带回(根据linq)我的分层数据,它开始看起来我想要它.我喜欢迭代内容但不能......我该怎么做?我怎么...

了解如何在不使用投影的情况下进入Data.Adjustment.而且我不想投射,因为我必须执行另一个分组....帮助!:-)

pho*_*oog 88

IGrouping<TKey, TElement>接口继承IEnumerable<TElement>:

foreach (var group in groupedData)
{
    var groupKey = group.Key;
    foreach (var groupedItem in group)
        DoSomethingWith(groupKey, groupedItem);
}
Run Code Online (Sandbox Code Playgroud)

我注意到,最好将此用于查询,但是:

var groupedData = Data.GroupBy(x => x.Period); 
Run Code Online (Sandbox Code Playgroud)

而不是这个:

var groupedData = Data.GroupBy(x => new {x.Period}); 
Run Code Online (Sandbox Code Playgroud)

例如,如果您想平均调整,则可以执行以下操作:

foreach (var group in groupedData)
    Console.WriteLine("Period: {0}; average adjustment: {1}", group.Key, group.Average(i => i.Adjustment));
Run Code Online (Sandbox Code Playgroud)


jas*_*son 11

序列中的每个元素IGrouping<TKey, TElement>都是IEnumerable<TElement>您可以迭代以获取具有公共数据的数据TKey:

var groups = Data.GroupBy(x => x.Period);
foreach(var group in groups) {
    Console.WriteLine("Period: {0}", group.Key);
    foreach(var item in group) {
        Console.WriteLine("Adjustment: {0}", item.Adjustment);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以在上面,groups是(你没有告诉我们)的类型IEnumerable<IGrouping<TPeriod, TAdjustment>>在哪里,是类型.然后,是一个实现的对象(但它也有一个属性,以便您可以获取密钥.最后,是一个,并且对于每个,所有来自迭代的具有相同的密钥.TPeriodPeriodTAdjustmentAdjustmentgroupIEnumerable<TAdjustment>KeyitemTAdjustmentgroupitemgroup


Bro*_*ass 9

只需使用foreach:

foreach(var group in groupedData)
{
   Console.WriteLine("Period: {0}", group.Key);
   foreach(var item in group)
      Console.WriteLine("   Adjustment: {0}", item.Adjustment);
}
Run Code Online (Sandbox Code Playgroud)


小智 8

虽然可能对其他人显而易见,但也可以使用:

var groups = Data.GroupBy(x => x.Period);

foreach(var group in groups)
{
   List<Data> dataListByPeriod = group.ToList();
   //use this list
}
Run Code Online (Sandbox Code Playgroud)