J'ai une table de base de données d'événements. Chaque événement a une catégorie et une date/heure.
(en fait, les événements ont des sous-catégories qui sont contenues dans des catégories et diverses autres propriétés, omises dans cet exemple simplifié)
Je veux générer une liste avec une entrée pour chaque heure et catégorie, en indiquant le nombre d'événements et leur pourcentage.
date | catégorie | nombre d'événements | pourcentage
----------------------------------------------------------
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%
...
J'ai du mal à calculer le pourcentage de manière efficace. Voici ce que j'ai jusqu'à présent:
var résultats = datacontext.events.
groupBy(e=>new
{ // group by category and hour
catégorie = e.catégorie,
datetime = new DateTime (
e.datetime.Year, e.datetime.Month, e.datetime.Day,
e.datetime.Hour, 0, 0 )
// utilisez date+heure pour regrouper, ignorez les minutes/secondes
}).
sélectionner(groupe => new
{
catégorie = groupe.Key.catégorie,
datetime = groupe.Key.datetime,
nombre d'événements = groupe.count(),
pourcentage = groupe.count() / ["nombre total d'événements pour cette heure"] * 100.0
}
Comment puis-je obtenir la valeur pour [nombre total d'événements pour cette heure], idéalement de manière élégante et efficace?