2009-03-26 9 views
4

J'essaye d'entrer dans LINQ aux objets car j'en vois la puissance. Heureusement, j'ai une question que je pense que LINQ devrait être capable de résoudre.LINQ - Aidez-moi à comprendre avec un exemple que je pense que LINQ devrait être capable de résoudre!

Voici la question (les détails sont un exemple);

public class SchoolClass 
{ 
    public int ID; 
    public string Name; 
    public string Teacher; 
    public string RoomName; 

    public string Student_Name; 
    public int Student_Age; 
} 

Comme vous pouvez le voir par l'exemple, il y a une relation un à plusieurs entre le ClassName, Maître et chambre et les étudiants, à savoir il y a potentiellement beaucoup d'étudiants dans une classe.

Si nous avons une liste est-il possible d'utiliser LINQ pour créer une liste, mais avoir un seul ID d'instance, nom, professeur, nom de salle et une liste de noms d'étudiants et d'âge?

La production de ce:

public class Students 
{ 
    public string Student_Name; 
    public int Student_Age; 
} 

public class SchoolClass 
{ 
    public int ID; 
    public string Name; 
    public string Teacher; 
    public string RoomName; 

    public ArrayList Students; 
} 

Essentiellement, en utilisant LINQ pour nettoyer la liste à une structure plus logique?

Pour donner un peu d'arrière-plan à cet exemple. La deuxième structure est utilisée par un DataGrid pour produire une relation maître-enfant. Nous stockons SchoolClass et StudentInformation dans les classes comme indiqué ci-dessus. Il serait bon d'utiliser LINQ pour convertir notre liste initiale en une structure pouvant être utilisée par le DataGrid.

+0

Vos cours utilisent des champs publics. Un vrai non-non. Essayez d'utiliser les propriétés istead. "public string Teacher {get; set;}" En outre, pensez à utiliser une liste plutôt qu'une liste d'élèves. – andleer

+0

Pourquoi SchoolClass contient-il un champ de chaîne d'un seul Student_Name ou est-ce un exemple? Est-ce que la classe Students existe déjà? comment sont stockés plusieurs élèves dans la hiérarchie des classes SchoolClass? –

+0

@Andrew - d'accord –

Répondre

6

J'ai changé le ArrayList-List<Students> et:

List<SourceData> source = new List<SourceData>(); 
    //...your data here ;-p 
    var classes = (from row in source 
        group row by new { 
          row.ID, row.Name, 
          row.Teacher, row.RoomName } 
         into grp 
         select new SchoolClass 
         { 
          ID = grp.Key.ID, 
          Name = grp.Key.Name, 
          Teacher = grp.Key.Teacher, 
          RoomName = grp.Key.RoomName, 
          Students = new List<Students>(
           from row in grp 
           select new Students 
           { 
            Student_Age = row.Student_Age, 
            Student_Name = row.Student_Name 
           }) 
         }).ToList(); 
+0

je peux utiliser ceci .. merci – Fleming

+0

si la classe d'école avait des propriétés supplémentaires qui n'étaient pas nécessaires pour le groupement, mais devraient être présents dans la liste des résultats finaux. C'est-à-dire que TeacherFirstName, TeacherLastName etc ... est suffisant pour regrouper seulement quelques propriétés. – Fleming

+0

Eh bien, lequel choisiriez-vous (il pourrait y avoir plusieurs hits différents). Mais dans ce cas, vous pouvez utiliser: Teacher = grp.Select (x => x.Teacher) .First() –

1

Si je comprends correctement, j'aurais pensé que la meilleure façon de mettre en œuvre la classe SchoolClass serait de créer une classe d'étudiants (probablement une entité LINQ to SQL, si vous l'utilisez) et d'avoir une liste générique des étudiants de type, quelque chose de similaire à ceci:

public class SchoolClass 
{  
    public int ID;  
    public string Name;  
    public string Teacher;  
    public string RoomName;  
    public List<Student> Students; 
} 

La liste des élèves pourrait alors être renseigné à l'aide d'une requête LINQ, même si je ne suis pas sûr exactement comment plus d'informations.

Espérons que ce soit de l'aide.

+0

laisse supposer que la liste peut contenir 50 SchoolClass et nous avons juste besoin de mettre toutes les informations de Student dans une sous-liste pour avoir une SchoolClass et une ArrayList pour les étudiants 50 profonde. – Fleming

Questions connexes