Groupe par une colonne puis Ajouter à chaque groupe de datatable puis dans un dataset
quelle serait la meilleure approche pour une telle chose?
voici donc ma Datatable
╔═══════════════╦═══════════════╦═══════════════╗
║ Product Name ║ Product Price ║ Product Group ║
╠═══════════════╬═══════════════╬═══════════════╣
║ Skirt Red ║ 99 ║ 1 ║
║ Jeans Blue ║ 49 ║ 2 ║
║ Jeans Black ║ 49 ║ 2 ║
║ Skirt Blue ║ 99 ║ 1 ║
║ T-shirt White ║ 20 ║ 3 ║
║ T-shirt Green ║ 20 ║ 3 ║
║ Jeans Grey ║ 49 ║ 2 ║
╚═══════════════╩═══════════════╩═══════════════╝
je vais regrouper ce datatable par le groupe de produits de colonne à l'aide de LINQ pour produire les groupes suivants
Group #1
╔═══════════════╦═══════════════╦
║ Product Name ║ Product Price ║
╠═══════════════╬═══════════════╬
║ Skirt Red ║ 99 ║
║ Skirt Blue ║ 99 ║
╚═══════════════╩═══════════════╩
Group #2
╔═══════════════╦═══════════════╦
║ Product Name ║ Product Price ║
╠═══════════════╬═══════════════╬
║ Jeans Blue ║ 49 ║
║ Jeans Black ║ 49 ║
║ Jeans Grey ║ 49 ║
╚═══════════════╩═══════════════╩
Group #3
╔═══════════════╦═══════════════╦
║ Product Name ║ Product Price ║
╠═══════════════╬═══════════════╬
║ T-Shirt White ║ 20 ║
║ T-Shirt Green ║ 20 ║
╚═══════════════╩═══════════════╩
maintenant, les questions sont
- comment puis-je groupe par le groupe de Produits de colonne à l'aide de LINQ (Fait)
- comment puis-je supprimer le Produit de la colonne groupe de la groupe?
- comment puis-je ajouter chaque groupe à un autre datatable et ajoutez tous
les tables de jeu de données unique?(Fait) - supposons qu'il y a des colonnes que je ne veux pas montrer dans les
groupe, comment puis-je cacher?
voici ce que j'ai essayé jusqu'à présent
Dim ds As New DataSet
Dim query = From r In bookedorders Group By key = r.Field(Of Integer)("productgroup") Into Group
For Each grp In query
Dim x As New DataTable
x = grp.Group.CopyToDataTable()
ds.Tables.Add(x)
Next
maintenant cela fonctionne sauf que je ne suis pas sûr de savoir comment sélectionner des colonnes spécifiques, comme je ne veux pas afficher toutes les colonnes dans les tables de données
- juste ajouté que la question de
Vous devez vous connecter pour publier un commentaire.
1.comment puis-je groupe par le groupe de Produits de colonne à l'aide de LINQ
Cela ressemble à ce que vous demandez n'est pas techniquement appelé un groupe de LINQ. Le regroupement dans linq signifie que vous êtes en prenant les valeurs d'une colonne et en les combinant, d'une certaine façon(SOMME, Moyenne) et l'affichage d'un enregistrement par certains identificateur unique. Dans votre exemple, si vous souhaitez afficher le prix moyen par groupe alors que aurait besoin d'un groupe, mais à partir de votre explication, il semble que vous juste besoin de 3 différentes instructions select qui pourrait ressembler à:
From r in products where r.groupID = YourControlVariable select r.ProductName, r.ProductPrice
Où YourControlVariable serait un ID de groupe. Cette LINQ vous donnera les trois tables que vous avez décrite et à partir de là que l'on peut appeler
CopyToDataTable
fonction de ce que l'LINQ retourné et mis temporaire datatable égale à la sortie de cette fonction.2.comment puis-je supprimer le Produit de la colonne groupe de la groupe?
Reportez-vous à la linq du point 1, en listant uniquement les colonnes que vous voulez sélectionner vous sera essentiellement en ignorant toutes les colonnes qui ne sont pas listés.
3.comment puis-je ajouter chaque groupe à un autre datatable et ajoutez tous les tables de jeu de données unique?
Ce serait assez simple à réaliser dans une boucle si vous connaissez l'id de groupe du, vous allez travailler avec. vous pouvez créer un temporaire datatable à l'intérieur d'une boucle et de la régler à contenir les résultats de l'linq à partir du point 1. une fois que vous avez les résultats que vous pouvez ensuite le nom et l'ajouter à la table d'un jeu de données et une fois que la boucle est terminée temporaire datatables va disparaître, mais vous serez en mesure de référence par nom dans le jeu de données elle-même.
4.supposons qu'il y a des colonnes que je ne veux pas montrer dans les groupe, comment puis-je cacher?
Se référer au point 1/2.
Edit:
Comme vous l'avez décrit le problème, je pense que l'utilisation d'un groupe par dans le LINQ rend inutilement compliqué, en ce que vous avez à traiter avec des types anonymes si vous voulez extraire des propriétés individuelles. Voici un court extrait qui obtient tous les différents id de groupe puis utilise LINQ to tirez sur tous les produits de chaque type, addsd à une table, puis ajoute le nom de la table pour le jeu de données. Vous pouvez supprimer le nom de la partie ou de le modifier pour être ce que vous voulez il n'a pas vraiment d'importance.
J'ai changé d'exemple un peu pour utiliser l'Élément de la collection, mais cela ne fonctionne que si
bookedorders
est un datatable.Edit #2:
Après y avoir réfléchi un peu, l'exemple ci-dessus vous donnera une collection de types anonymes comme un résultat. Donc, pour obtenir autour de ce que vous pourriez changer la
ligne pour ressembler à:
et puis à l'intérieur de votre déclaration si ressemblera:
De nouveau cela ne fonctionnera que si vous êtes LINQing par le biais d'un datatable et d'obtenir un
Enumerable(Of DataRow)
que votre résultat, ce qui est préférable.CopyToDataTable
méthode.Je n'ai pas l'habitude VB.NET la syntaxe, il devrait être quelque chose comme ceci (je ne garantis pas à 100% que le code compile):
Pour plus de contrôles que vous pouvez voir ceci:
http://msdn.microsoft.com/en-us/vstudio/bb737908
et en particulier la GroupBy Imbriquée de l'échantillon, où vous pouvez voir comment vous pouvez le projet à l'intérieur d'un groupe.
Si vous en sortir et de trouver une erreur de compilation dans ma réponse je sais pas quoi et je vais le corriger.
copytodatatable