情景描述:数据库中有一张设备表,字段DWDM存放的是各个厂编号,字段ZNBH存放的是设备编号。其中DWDM跟ZNBH是一对多的关系。需要将数据库中的值加载到List<Dictionary<string,List<string>> 中。
其中内部List<string>存放的是一个站内编号ZNBH,Dictionary<string,List<string>> 存放的是一个厂的DWDM和所有的站内编号ZNBH,
List<Dictionary<string,List<string>>中存放的是各个厂的各台设备。
数据库中数据如下:
案例分析:根据题意,结合以上具体数据,可知数据库中存放了这样的数据
List<string> list=new List<string>()
{
"01","02","SL"
};
Dictionary<string,List<string>> dic=new Dictionary<string,List<string>>();
dic.add("30202419",list);
List<Dictionary<string,List<string>>> result=new List<Dictionary<string,List<string>>>();
result.add(dic);
这里关键是创建List<string>的时机 - 某个厂的第一台设备,将dic加入结果集的时机 - 某个厂的最后一台设备。
代码实现:
public List<Dictionary<string, List<string>>> GetDwdmZnbhList(int type) { List<Dictionary<string, List<string>>> result = null; string sql = @"select dwdm,znbh from sysconfig_llwh where jclx={0} group by dwdm, znbh order by dwdm"; sql = String.Format(sql, type); DataTable dt = DBDataAccess.GetInstance().GetDataTable(SysConfig.TargetConnectionString, sql); string dwdm_pre = String.Empty; string dwdm = String.Empty; string dwdm_next = String.Empty; string znbh = String.Empty; Dictionary<string, List<string>> dic = null; List<string> list = null; result = new List<Dictionary<string, List<string>>>(); for (int i = 0; i < dt.Rows.Count; i++) { //为本行前面的单位代码赋值 if (i == 0) dwdm_pre = ""; else dwdm_pre = dt.Rows[i - 1]["DWDM"].ToString(); //为本行单位代码赋值 dwdm = dt.Rows[i]["DWDM"].ToString(); //为本行后面行的单位代码赋值 if (i != dt.Rows.Count - 1) dwdm_next = dt.Rows[i + 1]["DWDM"].ToString(); else dwdm_next = ""; if (dwdm_pre != dwdm) { //在谋厂第一台设备时,创建List,Dic list = new List<string>(); dic = new Dictionary<string, List<string>>(); dwdm = dt.Rows[i]["DWDM"].ToString(); znbh = dt.Rows[i]["ZNBH"].ToString(); list.Add(znbh); dic.Add(dwdm, list); if (dwdm != dwdm_next) result.Add(dic); } else { znbh = dt.Rows[i]["ZNBH"].ToString(); list.Add(znbh); dic.Clear(); dic.Add(dwdm, list); //在谋厂最后一台设备时,将Dic 加入List中 if (dwdm != dwdm_next) result.Add(dic); } } return result; }