LINQ与groupby和count

这很简单,但我很茫然:鉴于这种数据集:

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方法,但却给了我不同的答案。

回答:

调用之后GroupBy,您将获得一系列的组IEnumerable<Grouping>,其中每个分组本身都会公开Key用于创建组的组,并且也是IEnumerable<T>原始数据集中的任何项之一。您只需要调用Count()该分组即可获得小计。

foreach(var line in data.GroupBy(info => info.metric)

.Select(group => new {

Metric = group.Key,

Count = group.Count()

})

.OrderBy(x => x.Metric)

{

Console.WriteLine("{0} {1}", line.Metric, line.Count);

}


这是一个非常出色的快速回复,但是我在第一行有一个问题,特别是“ data.groupby(info => info.metric)”

我假设您已经有一些class看起来像的列表/数组

class UserInfo {

string name;

int metric;

..etc..

}

...

List<UserInfo> data = ..... ;

当您这样做时data.GroupBy(x =>

x.metric),它的意思是“对于xIEnumerable中定义的每个元素data,计算.metric,然后将具有相同度量的所有元素分组到中,Grouping并返回IEnumerable所有结果组中的一个。给定示例数据集

    <DATA>           | Grouping Key (x=>x.metric) |

joe 1 01/01/2011 5 | 1

jane 0 01/02/2011 9 | 0

john 2 01/03/2011 0 | 2

jim 3 01/04/2011 1 | 3

jean 1 01/05/2011 3 | 1

jill 2 01/06/2011 5 | 2

jeb 0 01/07/2011 3 | 0

jenn 0 01/08/2011 7 | 0

在groupby之后将产生以下结果:

(Group 1): [joe  1 01/01/2011 5, jean 1 01/05/2011 3]

(Group 0): [jane 0 01/02/2011 9, jeb 0 01/07/2011 3, jenn 0 01/08/2011 7]

(Group 2): [john 2 01/03/2011 0, jill 2 01/06/2011 5]

(Group 3): [jim 3 01/04/2011 1]

以上是 LINQ与groupby和count 的全部内容, 来源链接: utcz.com/qa/421568.html

回到顶部