我正在尝试更多地了解以下功能....我创建了一个自定义类,并要求通过多个属性(a,b)进行分组。 我也希望按时间分组,很难解释,但如果元素时间间隔小于30分钟,我会喜欢他们一起摸索,有点滚动时间,所以如果有东西有1点然后另一个发现在1:20它是上限值所以从1:20起30分钟的任何时间都被分组....如果这是可能的话。我猜这些分组的项目是以我可以连续字符串,总和数字等格式返回的吗?
foreach (var groups in raw.GroupBy(a => a.ID))
{
MessageBox.Show(groups.Count());
}
Ps这个GroupBy叫什么? (对不起,我是一名地理标志的学生,正在摆弄一些数据分组的东西)
答案 0 :(得分:2)
假设您有自定义类objects
的可枚举:
var objects = new YourObject[] { ... }
您可以将它们分组为20秒,如下所示:
var twentySecondChunks = objects.GroupBy(x => x.TimeSpan.TotalSeconds % 20);
是的,它们会以一种方式返回,以便您可以查询所有属性:
foreach (var group in objects.GroupBy(x => x.TimeSpan.TotalSeconds % 20))
{
MessageBox.Show(groups.Count());
foreach (var groupItem in group)
{
MessageBox.Show(groupItem.A);
MessageBox.Show(groupItem.B);
}
}
答案 1 :(得分:1)
当您致电IEnumerable<TElement>.GroupBy<TKey>
时,您基本上只会获得一个IEnumerable<TElement>
,其中TKey
类型的属性设置为分组值。因此,您可以按照处理IEnumerable<TElement>
的方式对待每个组。您可以使用LINQ扩展方法执行您描述的操作。
文档位于:http://msdn.microsoft.com/en-us/library/bb534501.aspx,您也可以从@neontapir提供的链接中学习
答案 2 :(得分:0)
GroupBy是System.Linq在IEnumerable<T>
上定义的扩展方法。 http://msdn.microsoft.com/en-us/vcsharp/aa336746有几个Linq示例,包括GroupBy用法。