tengo una estructura jerárquica de clase así:Llenar una estructura jerárquica con la clase de datos
Categoría -> Plantilla -> Instancia
Una categoría contiene varias plantillas, una plantilla contiene varias instancias.
Si consultar los datos de la base de datos a través de una unión sobre los 3 tablas, los datos se ve algo como esto:
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"
(sólo un ejemplo, las tablas de datos reales tienen mucho más columnas)
¿Cuál es la mejor/manera común en C# para completar las clases con este tipo de datos cuando lo recorre con un lector de datos?
Desde la parte superior de mi cabeza me gustaría hacerlo de esta manera:
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"]);
}
¿Existe una solución mejor, más elegante para llenar los objetos de clases jerárquicas? Tal vez usando LINQ o Diccionarios?
Nota: Esta pregunta está relacionada con mi otra pregunta acerca del best way to gather hierarchical data from a DB. Lo dividí porque estos son dos temas separados.
Gracias para señalar eso, una plantilla puede estar en múltiples categorías. A pesar de que todavía estoy descontento con la obtención de datos que son iguales para muchas filas de la primera, creo que lo implementaré de esta manera, si no hay una mejor sugerencia. – magnattic