2010-02-12 5 views
1

J'ai une situation où j'ai données comme suitlignes à colonnes sans boucle

User1 Address1 HomeAddress  Address1Value 
User1 Address2 WorkAddress  Address2Value 
User1 Phone1  HomePhone  Phone1Value 
User1 Phone2  WorkPhone  Phone2Value 
User2 Address1 HomeAddress  Address1Value 
User2 Address2 WorkAddress  Address2Value 
User2 Phone1  HomePhone  Phone1Value 
User2 Phone2  WorkPhone  Phone2Value 
User3 Address1 HomeAddress  Address1Value 
User3 Address2 WorkAddress  Address2Value 
User3 Phone1  HomePhone  Phone1Value 
User3 Phone2  WorkPhone  Phone2Value 

Maintenant, je dois afficher les données ci-dessus comme suit dans un gridview. Une option que j'ai, c'est que je boucle l'ensemble de données et convertir 4 lignes de données en colonnes. puis liez les données. mais cela ne ressemble pas à un moyen efficace de faire puisque j'ai beaucoup de données.

Existe-t-il un moyen efficace de le faire? J'utilise LINQ to SQL pour cela. J'ai une vue Sql Server qui renvoie le résultat de 4 lignes par utilisateur.

+0

Si vous utilisez SP, alors "PIVOT" est un moyen facile d'aller .... désolé, je ne sais pas beaucoup abt linq-sql – RameshVel

+0

Est-ce que cela provient d'une base de données? Cela ne peut-il pas être fait en utilisant SQL, de sorte que vous n'avez pas à faire une telle chose dans le code? – shahkalpesh

Répondre

0

Si vous transportez déjà «beaucoup de données» sur le réseau depuis la base de données vers l'application, la dernière étape de son pivotement en mémoire ne risque pas d'être un gros problème. IMO, faites-le pivoter "à la source", ou faites le pivoter localement et puis voir s'il s'agit d'un goulot d'étranglement. Vous pourrait également écrire un modèle de liaison funky, mais je doute que cela en vaille la peine. Une dernière option consiste à utiliser "mode virtuel" (si la liste le supporte), et effectuer la traduction au cours de la recherche (idéalement en utilisant une recherche de ligne basée sur un dictionnaire - peut-être un Lookup<,> précalculé).

0

Pour ne pas digérer trop loin de Marc's answer, je recommande fortement de le faire sur SQL Server. Le pivotement est généralement une opération beaucoup plus rapide (le serveur SQL est optimisé pour faire ce genre de choses après tout).

De plus, il est le code vous n'avez pas à écrire (ce qui signifie le code de pivot, puisque SQL vous fournit l'opération, par opposition à écrire dans .NET sur votre propre), ce qui est un point important ici , OMI.