2012-08-07 2 views
0

J'ai un cours d'étudiant.obtenir toutes les valeurs du dictionnaire en utilisant linq à la liste des types anonymes

class student : DynamicObject 
    { 
      public Dictionary<string, object> dics = new Dictionary<string, object>(); 
    } 

En ajoutant des propriétés dynamiquement à cette classe. Après i peuplé un

list<student> lists, 

Comment puis-je récupérer les clés et les valeurs dans le dictionnaire dans la classe chaque étudiant LINQ. Alors que je peux le lier à un DataGrid. Les clés seront les mêmes pour tous les dictionnaires de chaque objet étudiant car ce seront les noms des colonnes. Les valeurs seront différentes qui sont les valeurs de la colonne. Alors que je peux lier ce type anonyme à la grille de données. J'ai essayé la méthode suivante. Mais le résultat n'est pas correct.

var result = lists.SelectMany(x => x.Dictionary.Keys).Select(m => new 
       { 
        StudentID = m[1], 
        RegNo = m[2], 
        JoinYear = m[3] 
       }).ToList(); 

enfin, je peux lier comme celui-ci,

grid.DataSource = result; 
grid.DataBind(); 

Ainsi, la grille montrera les colonnes des clés de dictionnaire et toutes les lignes seront peuplées en utilisant les valeurs du dictionnaire. De l'aide ???

Merci beaucoup.

+0

Est-ce le contrôle WPG 'DataGrid', ou le contrôle WinForms' DataGridView'? –

+0

asp.net. est-ce possible ? –

+0

Si les clés sont les mêmes pour chaque étudiant, pourquoi utilisez-vous un dictionnaire plutôt que des propriétés appropriées? – Rawling

Répondre

1

Votre SelectMany est inutile - vous voulez sélectionner une ligne pour chaque élève, et non pas une ligne pour chaque propriété sur chaque élève, donc vous avez seulement besoin d'un Select:

var result = lists.Select(m => new 
    { 
     StudentID = m.Dict["StudentID"], 
     RegNo = m.Dict["RegNo"], 
     JoinYear = m.Dict["JoinYear"] 
    }); // no need for ToList if you're just binding. 

de l'OMI coure vous seriez il vaut mieux utiliser des propriétés fortement typées sur votre objet Student et les remplir correctement à partir de votre procédure stockée; le nyou n'aurait pas besoin d'objets anonymes ici.

+1

merci beaucoup –

Questions connexes