如何迭代IGrouping<;T>;界面
本文关键字:lt gt 界面 IGrouping 何迭代 迭代 | 更新日期: 2023-09-27 18:28:00
我遇到了一个非常烦人的问题,我对一组数据进行了分组,但无法访问组中的数据。我能找到关键点而不是数据。。
我有一堆形式的数据
Data.Period = x
Data.Adjustment = y
我执行GroupBy
var groupedData = Data.GroupBy(x => x.Period new {x.Period});
这带回了(根据linq)我的分层数据,它开始看起来像我想要的那样。我想迭代内容,但不能。。。我该怎么做?以及我如何…
了解如何获取数据。在不使用投影的情况下进行调整。我还不想投影,因为我必须执行另一个分组。。。。救命!:-)
IGrouping<TKey, TElement>
接口继承IEnumerable<TElement>
:
foreach (var group in groupedData)
{
var groupKey = group.Key;
foreach (var groupedItem in group)
DoSomethingWith(groupKey, groupedItem);
}
我注意到,你最好使用这个查询,然而:
var groupedData = Data.GroupBy(x => x.Period);
而不是这个:
var groupedData = Data.GroupBy(x => new {x.Period});
例如,如果你想平均调整,你可以这样做:
foreach (var group in groupedData)
Console.WriteLine("Period: {0}; average adjustment: {1}", group.Key, group.Average(i => i.Adjustment));
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);
}
}
所以在上面,groups
是IEnumerable<IGrouping<TPeriod, TAdjustment>>
,其中TPeriod
是Period
的类型(你没有告诉我们),TAdjustment
是Adjustment
的类型。然后,group
是一个实现IEnumerable<TAdjustment>
的对象(但它也有一个Key
属性,这样你就可以获得密钥。最后,item
是一个TAdjustment
,对于每个group
,迭代该group
得到的所有item
都有相同的密钥。
虽然对其他人来说可能很明显,但也可以使用:
var groups = Data.GroupBy(x => x.Period);
foreach(var group in groups)
{
List<Data> dataListByPeriod = group.ToList();
//use this list
}
只需使用foreach
:
foreach(var group in groupedData)
{
Console.WriteLine("Period: {0}", group.Key);
foreach(var item in group)
Console.WriteLine(" Adjustment: {0}", item.Adjustment);
}
您也可以使用以下代码。
var groupedData = Data.GroupBy(x => x.Period);
foreach (var group in groupedData) {
var gr = group.FirstOrDefault();
Console.WriteLine("Period: {0}", gr.Period);
Console.WriteLine("Adjustment: {0}", gr.Adjustment);
}