gpt4 book ai didi

c# - LINQ 与 groupby 和计数

转载 作者:IT王子 更新时间:2023-10-29 03:29:52 25 4
gpt4 key购买 nike

这很简单,但我不知所措:给定这种类型的数据集:

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 和计数的位置...有帮助吗?

POST 编辑:我始终无法使发布的答案发挥作用,因为它们总是返回一条包含不同计数的记录。但是,我能够将一个确实有效的 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) ,它意味着“对于 x 定义的 IEnumerable 中的每个元素 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]

关于c# - LINQ 与 groupby 和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7285714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com