ho una struttura di classe gerarchica come questa:Riempire una struttura di classe gerarchica con i dati
Categoria -> Modello -> Istanza
Una categoria contiene più modelli, un modello contiene più istanze.
Se interrogo i dati dal database tramite un join su tutte e 3 le tabelle, i dati sembra qualcosa di simile:
CategoryID | CategoryName | CategoryType | TemplateID | TemplateName | TemplateXYZ | InstanceID | InstanceName
1 | "CatA" | "TypeX" | 1 | "TempA" | "X" | 1 | "InstA"
1 | "CatA" | "TypeX" | 1 | "TempA" | "X" | 2 | "InstB"
1 | "CatA" | "TypeX" | 1 | "TempA" | "X" | 3 | "InstC"
1 | "CatA" | "TypeX" | 1 | "TempB" | "Y" | 4 | "InstD"
(solo un esempio, le tabelle di dati reali hanno molto più colonne)
Qual è il modo migliore/comune in C# per riempire le classi con questo tipo di dati quando si passa attraverso di esso con un lettore di dati?
Dalla cima della mia testa vorrei fare in questo modo:
while(data.Read())
{
// Create new objects each time the ID changes and read the data from the first row
if(data["CategoryID"] != lastCategoryID) {
lastCategoryID = data["CategoryID"];
cat = new Category(data["CategoryName"], data["CategoryType"]);
catList.Add(cat);
}
if(data["TemplateID"] != lastTemplateID) {
lastTempateID = data["TemplateID"];
template = new Template(data["TemplateName"], data["TemplateXYZ"]));
cat.Templates.Add(template);
}
template.Instances.Add(new Instance(data["InstanceID"], data["InstanceName"]);
}
Esiste una soluzione migliore e più elegante per riempire gli oggetti di classe gerarchica? Forse usando LINQ o dizionari?
Nota: questa domanda è correlata alla mia altra domanda relativa allo best way to gather hierarchical data from a DB. L'ho diviso perché si tratta di due problemi separati.
Grazie per indicarlo, un modello può effettivamente essere in più categorie. Anche se sono ancora in qualche modo scontento di ottenere dati che siano uguali per molte righe solo dal primo, suppongo che lo implementerò in questo modo, se non c'è un suggerimento migliore. – magnattic