【发布时间】:2012-04-10 15:18:13
【问题描述】:
我有一个事件数据库表。每个事件都有一个类别和一个日期/时间。
(实际上事件具有包含在类别和各种其他属性中的子类别,在此简化示例中省略了)
我想生成一个列表,其中包含每个小时和类别的条目,列出事件的数量及其百分比。
date | category | number of events | percentage
----------------------------------------------------------
2012-01-01 1:00 | cat-1 | 10 | 50%
2012-01-01 1:00 | cat-2 | 10 | 50%
2012-01-01 2:00 | cat-1 | 1 | 10%
2012-01-01 2:00 | cat-2 | 9 | 90%
2012-01-01 3:00 | cat-1 | 3 | 100%
...
我无法有效地计算百分比。 这是我目前所拥有的:
var results = datacontext.events.
groupBy(e=>new
{ // group by category and hour
category = e.category,
datetime = new DateTime (
e.datetime.Year, e.datetime.Month, e.datetime.Day,
e.datetime.Hour, 0, 0 )
// use date+hour for grouping, ignore minutes/seconds
}).
select(group => new
{
category = group.Key.category,
datetime = group.Key.datetime,
numberOfEvents = group.count(),
percentage = group.count() / ["total number of events for this hour"] * 100.0
}
我怎样才能获得 [这一小时的事件总数] 的值,理想情况下以一种优雅而有效的方式?
【问题讨论】:
标签: c# linq linq-to-sql group-by