J'ai une table de données comme celle-ci:
Category Description CurrentHours CTDHours
LC1 Cat One 5 0
LC2 Cat Two 6 0
LC3 Cat Three 18 0
LC1 Cat One 0 9
LC2 Cat Two 0 15
LC4 Cat Four 0 21
Que j'ai besoin de groupe et somme à ceci:
Category Description CurrentHours CTDHours
LC1 Cat One 5 14
LC2 Cat Two 6 21
LC3 Cat Three 18 0
LC4 Cat Four 0 21
En d'autres termes, je dois additionner les deux colonnes Heures en les regroupant dans les colonnes Catégorie et Description.
Je sais que je pourrais construire une nouvelle table et parcourir les données existantes et les additionner dans la nouvelle table, mais je pensais qu'il serait plus simple de le faire avec Linq. Je l'ai googlé pendant quelques heures mais tous les exemples que j'ai trouvés ne semblaient pas correspondre à ce que j'essayais de faire.
BTW, le pilote odbc qui crée la table de données n’a pas la capacité de sous-requêtes, etc. ou je l’aurais juste fait en utilisant SQL.
Utilisez un objet anonyme pour regrouper par catégorie et description. Voici la requête Linq to DataSet qui renvoie les heures groupées:
from r in table.AsEnumerable()
group r by new {
Category = r.Field<string>("Category"),
Description = r.Field<string>("Description")
} into g
select new {
Category = g.Key.Category,
Description = g.Key.Description,
CurrentHours = g.Sum(x => x.Field<int>("CurrentHours"),
CTDHours = g.Sum(x => x.Field<int>("CurrentHours") + x.Field<int>("CTDHours"))
}
Si vous interrogez la base de données (la question n'est pas claire):
from r in context.Table
group r by new {
r.Category,
r.Description
} into g
select new {
g.Key.Category,
g.Key.Description,
CurrentHours = g.Sum(x => x.CurrentHours),
CTDHours = g.Sum(x => x.CTDHours + x.CurrentHours)
}
Vous devez additionner CurrentHours
et CTDhours
, donc -
select new {
...
CTDHours = g.Sum(x => x.Field<int>("CTDHours") + g.Sum(x => x.Field<int>("CurrentHours")
}