と階層クラス構造を充填:私はこのような階層的なクラス構造を有するデータ
カテゴリ - >テンプレート - >インスタンス
カテゴリには、複数のテンプレートが含まれているが、テンプレートは複数のインスタンスが含まれています。私はすべての3つのテーブルを超える参加を介してデータベースからデータを照会する場合
、データはこのようなものになります。
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または辞書を使用していますか?
注:この質問は、best way to gather hierarchical data from a DBに関する私の他の質問に関連しています。これは2つの別々の問題であるため、分割しました。
感謝をそれを指摘するために、テンプレートは実際には複数のカテゴリに入ることができます。私はまだ何とか最初のものだけから多くの行に等しいデータを得ることに不満を抱いていますが、良い方法はありません。 – magnattic