Tôi có một cấu trúc lớp thứ bậc như thế này:Điền một cấu trúc lớp thứ bậc với các dữ liệu
loại -> Template -> Instance
Một loại chứa nhiều mẫu, một mẫu có chứa nhiều trường hợp.
Nếu tôi truy vấn dữ liệu từ cơ sở dữ liệu thông qua một tham gia trên khắp 3 bảng, dữ liệu trông giống như sau:
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"
(chỉ là ví dụ, các bảng dữ liệu thực tế có cột nhiều hơn nữa)
Cách tốt nhất/phổ biến trong C# để điền vào các lớp với loại dữ liệu này khi đi xe đạp qua nó với trình đọc dữ liệu là gì?
Từ đỉnh đầu của tôi, tôi sẽ làm điều đó theo cách này:
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"]);
}
Có một giải pháp thanh lịch hơn tốt hơn để điền vào các đối tượng lớp thứ bậc? Có thể sử dụng LINQ hoặc Từ điển?
Lưu ý: Câu hỏi này liên quan đến câu hỏi khác của tôi về số best way to gather hierarchical data from a DB. Tôi chia nó ra vì đây là hai vấn đề riêng biệt.
Cảm ơn để chỉ ra rằng, một mẫu thực sự có thể có nhiều danh mục. Mặc dù tôi vẫn không hài lòng với việc nhận dữ liệu ngang bằng với nhiều hàng chỉ từ hàng đầu tiên, tôi đoán tôi sẽ thực hiện nó theo cách này, nếu không có gợi ý nào tốt hơn. – magnattic