Est-il possible d'associer des données à l'aide de LINQ?
Je me demande si il est possible d'utiliser LINQ to pivot de données à partir de la mise en page 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 ceci:
CustID | Jan- 2008 | Feb- 2008 | Mar - 2008 |
1 | 100 | 350 | 250
2 | 200 | 221 | 2150
Vous devez vous connecter pour publier un commentaire.
Quelque chose comme cela?
GroupBy
dans Linq n'est pas le même que SQL. En SQL, vous obtenez la clé et des agrégats (lignes/colonnes de la forme). Dans Linq, vous obtenez la clé et tous les éléments que les enfants de la clé (hiérarchique de la forme). À pivot, vous devez le projet de la hiérarchie de retour dans une ligne/colonne formulaire de votre choix.J'ai répondu question similaire à l'aide de linq méthode d'extension:
(+) générique de la mise en œuvre
(-) certainement plus lent que David B
Quelqu'un peut-il améliorer mon de mise en œuvre (c'est à dire la méthode qui effectue la commande de colonnes & lignes)?
La plus élégante pour cette approche, je pense, est d'utiliser une recherche:
Ici est un peu plus génériques de la manière d'pivot de données à l'aide de LINQ:
où ValueKey est une classe spéciale qui représente multidimensionnelle clés:
Cette approche peut être utilisée pour le regroupement par N dimensions (n>2) et fonctionnent bien, mais les petits jeux de données. Pour les grands ensembles de données (jusqu'à 1 million d'enregistrements et de plus en plus) ou pour les cas de pivot de configuration ne peut pas être codé en dur j'ai écrit spécial PivotData de la bibliothèque (c'est gratuit):
C'est le moyen le plus efficace:
Vérifier l'approche suivante. Au lieu d'itération par les clients du groupe à chaque fois pour chaque mois.
Ou celui-ci :
Solution complète:
Groupe de vos données sur des mois, et ensuite le projet dans un nouveau datatable avec des colonnes pour chaque mois. La nouvelle table de votre tableau croisé dynamique.