Je me demande s'il est possible d'utiliser LINQ pour faire pivoter les données à partir de la disposition suivante:
CustID | OrderDate | Qty
1 | 1/1/2008 | 100
2 | 1/2/2008 | 200
1 | 2/2/2008 | 350
2 | 2/28/2008 | 221
1 | 3/12/2008 | 250
2 | 3/15/2008 | 2150
en quelque chose comme ça:
CustID | Jan- 2008 | Feb- 2008 | Mar - 2008 |
1 | 100 | 350 | 250
2 | 200 | 221 | 2150
linq
pivot-table
Tim Lentine
la source
la source
J'ai répondu à une question similaire en utilisant la méthode d'extension linq:
(+) implémentation générique
(-) nettement plus lente que celle d'Amy B
Quelqu'un peut-il améliorer mon implémentation (c'est-à-dire que la méthode organise le classement des colonnes et des lignes)?
la source
L'approche la plus soignée pour cela, je pense, est d'utiliser une recherche:
la source
Voici une manière un peu plus générique de faire pivoter des données à l'aide de LINQ:
où ValueKey est une classe spéciale qui représente une clé multidimensionnelle:
Cette approche peut être utilisée pour le regroupement par N-dimensions (n> 2) et fonctionnera bien pour des ensembles de données plutôt petits. Pour les grands ensembles de données (jusqu'à 1 mln d'enregistrements et plus) ou pour les cas où la configuration du pivot ne peut pas être codée en dur, j'ai écrit une bibliothèque PivotData spéciale (elle est gratuite):
la source
C'est le moyen le plus efficace:
Vérifiez l'approche suivante. Au lieu de parcourir le groupe de clients à chaque fois pour chaque mois.
Ou celui-ci:
Solution complète:
la source
Regroupez vos données par mois, puis projetez-les dans une nouvelle table de données avec des colonnes pour chaque mois. Le nouveau tableau serait votre tableau croisé dynamique.
la source