У меня есть иерархическая структура классов, например:
Категория -> Шаблон -> Экземпляр
Категория содержит несколько шаблонов, шаблон содержит несколько экземпляров.
ЕслиЯ запрашиваю данные из базы данных через объединение всех трех таблиц, данные выглядят примерно так:
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"
(просто пример, таблицы реальных данных имеют гораздо больше столбцов)
Каков наилучший / распространенный способ в C # заполнять классы данными такого типа при циклическом переборе их с помощью устройства чтения данных?
Сверху головы я бы сделал это следующим образом:
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"]);
}
Есть ли лучшее, более элегантное решение для заполнения объектов иерархического класса?Может быть, используете LINQ или словари?
Примечание. Этот вопрос связан с моим другим вопросом о лучшем способе сбора иерархических данных из БД .Я разделил это, потому что это две отдельные проблемы.