【发布时间】:2016-04-25 15:56:44
【问题描述】:
假设我有一个应该返回三个表的存储过程:
SELECT AID, AName
FROM AThings
SELECT BID, BName, AID
FROM BThings
SELECT CID, CName, BID
FROM CThings
在类表示中:
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 引用了BThing,BThing 引用了AThing。
要执行存储过程并填充我的对象,我使用的是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);
}
}
}
- 在第三个嵌套中,如何检索 AThingID?
- 有没有更聪明的方法来填充嵌套集合?起初我虽然是关于字典的,但也许有一个更简单/更清晰的模式。
- 更多级别的嵌套呢?
【问题讨论】:
标签: c# .net sql-server dto datareader