2011-05-28 2 views
3
ISO Code description Year value 
CAD Canadian Dollar  2009 1.3001 
CAD Canadian Dollar  2010 1.3001 
CAD Canadian Dollar  2011 0.0001 
EUR Euro    2009 1.0000 
EUR Euro    2010 1.0000 
EUR Euro    2011 0.0001 
USD US Dollar   2009 1.2300 
USD US Dollar   2010 1.2300 
USD US Dollar   2011 0.0001 

Tableau 1Pivot en C# entity framework 3.5

ISO Code description 2009 2010 2011 
CAD Canadian Dollar  1.3001 1.3001 0.0001 
EUR Euro    1.0000 1.0000 0.0001 
USD US Dollar   1.2300 1.2300 0.0001 

Tableau 2

Comment le tableau 1 être converti en tableau 2 LINQ en C#, à condition que le nombre d'années est dynamique (il est pas fixé à 2009,2010, 2011, les valeurs 2012,2013 et ainsi de suite peut être ajouté par la suite)

les classes sont les suivantes

class Currency 
{ 
    public string ISO Code { get; set; } 
    public string Description { get; set; } 
} 
class Rate 
{   
    public string ISO Code { get; set; } 
    public int Year { get; set; } 
    public inr Value { get; set; } 

} 

En fin de compte, je dois lier les résultats à une grille. Quelqu'un peut-il aider s'il vous plaît

Répondre

2

Je pense que cela ne peut pas être fait dans Linq. Linq fonctionne avec des objets fortement typés, donc votre résultat doit être fortement typé mais vous dites que cela ne peut pas être parce que d'autres colonnes peuvent être ajoutées au fil du temps (pas de comportement dynamique dans .NET 3.5).

Vous devez interroger les données non pivoté et calculer les valeurs pivotés dans la mémoire et les transmettre à DataTable ou vous devez appeler SQL natif avec la commande PIVOT (SQL Server 2005 et plus récent) et de transmettre le résultat à votre point de vue de la grille.

Ceci est un scénario type pour les services de génération de rapports SQL Server et leur matrice (SSRS 2005) ou Tablix (SSRS 2008).

Éditer:

Avez-vous vraiment besoin d'un vrai pivot? Il n'y a pas de calcul dans votre tableau "pivoté". Il semble que vous avez juste besoin de cette requête:

var query = from c in ctx.Currencies.Include("Rates"); 

et transposer Rates lors de la préparation source de données pour une vue de la grille.

Questions connexes