[c#] LINQ与groupby和count


Answers

假设userInfoList是一个List<UserInfo>

        var groups = userInfoList
            .GroupBy(n => n.metric)
            .Select(n => new
            {
                MetricName = n.Key,
                MetricCount = n.Count()
            }
            )
            .OrderBy(n => n.MetricName);

GroupBy()的lambda函数, n => n.metric表示它将从每个遇到的UserInfo对象获取字段metricn的类型取决于上下文,首先出现的类型是UserInfo ,因为列表包含UserInfo对象。 在第二种情况下, n是类型Grouping ,因为现在它是Grouping对象的列表。

Grouping有很多扩展方法,如.Count() .Key()以及其他你所期望的。 就像你要检查一个string 。你可以检查一个组的.Count()

Question

这很简单,但我很茫然:给定这种类型的数据集:

UserInfo(name, metric, day, other_metric)

和这个样本数据集:

joe  1 01/01/2011 5
jane 0 01/02/2011 9
john 2 01/03/2011 0
jim  3 01/04/2011 1
jean 1 01/05/2011 3
jill 2 01/06/2011 5
jeb  0 01/07/2011 3
jenn 0 01/08/2011 7

我想检索一个表格,按照(0,1,2,3 ..)的顺序列出指标的总数并记录计数。 所以从这一套你最终会:

0 3    
1 2    
2 2    
3 1

我正在努力使用LINQ语法,但是我坚持在哪里放置一个groupby并且计数....任何帮助?

张贴编辑:我永远无法获得发布的答案工作,因为他们总是返回一个不同数量的记录。 不过,我能够将一个可以工作的LINQ to SQL例子放在一起:

        var pl = from r in info
                 orderby r.metric    
                 group r by r.metric into grp
                 select new { key = grp.Key, cnt = grp.Count()};

这个结果为我提供了一组有序的记录,其中包含“指标”以及与每个记录相关联的用户数量。 对于LINQ来说,我显然是新手,对于未经训练的人来说,这种方法看起来与纯LINQ方法非常相似,但给了我一个不同的答案。






Links