C#groupBy自定​​义类

时间:2011-03-10 06:26:59

标签: c#

我正在尝试更多地了解以下功能....我创建了一个自定义类,并要求通过多个属性(a,b)进行分组。 我也希望按时间分组,很难解释,但如果元素时间间隔小于30分钟,我会喜欢他们一起摸索,有点滚动时间,所​​以如果有东西有1点然后另一个发现在1:20它是上限值所以从1:20起30分钟的任何时间都被分组....如果这是可能的话。我猜这些分组的项目是以我可以连续字符串,总和数字等格式返回的吗?

foreach (var groups in raw.GroupBy(a => a.ID))
  {
    MessageBox.Show(groups.Count());
  }

Ps这个GroupBy叫什么? (对不起,我是一名地理标志的学生,正在摆弄一些数据分组的东西)

3 个答案:

答案 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用法。