Stellen Ich habe eine gespeicherte Prozedur, die drei Tabellen zurückgeben sollte:Populate verschachtelte Sammlungen mit Datareader
SELECT AID, AName
FROM AThings
SELECT BID, BName, AID
FROM BThings
SELECT CID, CName, BID
FROM CThings
In einer Klassendarstellung:
public class AThing
{
int AID { get; set; }
string AName { get; set;}
Dictionary<int, BThing> BThingsColl { get; set;}
}
public class BThing
{
int BID { get; set; }
string BName { get; set;}
int AID { get; set; }
List<CThing> CThingsColl { get; set;}
}
public class CThing
{
int CID { get; set; }
string CName { get; set;}
int BID { get; set; }
}
CThing
hat einen Verweis auf BThing
, hat BThing
einen Verweis zu AThing
.
Um die gespeicherte Prozedur ausgeführt, und mein Objekt zu füllen, ich bin mit einem DataReader
:
using (SqlDataReader dr = cmd.ExecuteReader())
{
var results = new Dictionary<int, AThing>();
while(dr.Read())
{
var downloadedAThing = new AThing();
downloadedAThing.BThingsColl = new Dictionary<int, BThing>();
downloadedAThing.AID = dr.GetInt32(0);
downloadedAThing.AName = dr.GetString(1);
results.Add(downloadedAThing.AID, downloadedAThing);
}
if (dr.NextResult)
{
while(dr.Read())
{
var downloadedBThing = new BThing();
downloadedBThing.CThingsColl = new List<CThing>();
downloadedBThing.BID = dr.GetInt32(0);
downloadedBThing.BName = dr.GetString(1);
downloadedBThing.AID = dr.GetInt32(2);
results[downloadedBThing.AID].BThingsColl.Add(downloadedBThing.BID, downloadedBThing);
}
}
if (dr.NextResult)
{
while(dr.Read())
{
var downloadedCThing = new CThing();
downloadedCThing.CID = dr.GetInt32(0);
downloadedCThing.CName = dr.GetString(1);
downloadedCThing.BID = dr.GetInt32(2);
int AThingID = // How to retreive me?
results[AThingID].BThingsColl[downloadedCThing.BID].Add(downloadedCThing);
}
}
}
- In der dritten nisten, wie kann ich die AThingID retreive?
- Gibt es eine cleverere Möglichkeit, verschachtelte Sammlungen zu bevölkern? Ich habe zunächst über Wörterbücher nachgedacht, aber vielleicht gibt es ein einfacheres/klareres Muster.
- Wie wäre es mit einer mehrstufigen Verschachtelung?