如何迭代字典字典列表?

如何迭代字典字典列表?

问题描述:

我有以下代码。我有一个Oracle查询返回多行。我需要将数据填充到字典列表中,但是我遇到了一个问题,即该列表始终填满最后一行重复的行。如何迭代每个Oracle行的列表。如何迭代字典字典列表?

代码:

var list = new List<string>(); 

List<Dictionary<String, String>> listDic = new List<Dictionary<String, String>>(); 

     using (var con = new OracleConnection(Config.EDLRDev)) 
     { 
      var com = con.CreateCommand(); 
      try 
      { 
       con.Open(); 
       com.CommandText = "SELECT * FROM edlr_comm_rep_total a where a.dealer_id = 'wb-pos00289' and a.comm_type = 'Activation' "; 

       //com.Parameters.Add("msisdn", OracleDbType.Char).Value = msisdn; 
       Dictionary<String, String> objDic = new Dictionary<string, string>(); 

       var reader = com.ExecuteReader(); 
       if (reader.HasRows) 
       { 
        while (reader.Read()) 
        { 
         string CommissionDealerId = reader[0].ToString(); 
         string Month = reader[1].ToString(); 
         string DealerCommissionType = reader[2].ToString(); 
         string CommissionCount = reader[3].ToString(); 
         string CommissionAmount = reader[4].ToString(); 
         objDic["CommissionDealerId"] = CommissionDealerId; 
         objDic["Month"] = Month; 
         objDic["DealerCommissionType"] = DealerCommissionType; 
         objDic["CommissionCount"] = CommissionCount; 
         objDic["CommissionAmount"] = CommissionAmount; 
         listDic.Add(objDic); 
        } 
       } 

       reader.Close(); 
      } 
      catch (Exception ex) 
      { 

       con.Dispose(); 

      } 
      con.Dispose(); 

      return listDic; 


     } 

您正在使用相同的词典objDic,它在while循环之外被实例化。您只是在循环中每次传递字典的值。在你的列表中,你正在添加对同一个objDic字典的引用,这就是为什么你有重复。您需要在while循环中的每个过程中创建一个新字典。

try 
     { 
      con.Open(); 
      com.CommandText = "SELECT * FROM edlr_comm_rep_total a where a.dealer_id = 'wb-pos00289' and a.comm_type = 'Activation' "; 

      //com.Parameters.Add("msisdn", OracleDbType.Char).Value = msisdn; 


      var reader = com.ExecuteReader(); 
      if (reader.HasRows) 
      { 
       while (reader.Read()) 
       { 
        Dictionary<String, String> objDic = new Dictionary<string, string>(); 
        string CommissionDealerId = reader[0].ToString(); 
        string Month = reader[1].ToString(); 
        string DealerCommissionType = reader[2].ToString(); 
        string CommissionCount = reader[3].ToString(); 
        string CommissionAmount = reader[4].ToString(); 
        objDic["CommissionDealerId"] = CommissionDealerId; 
        objDic["Month"] = Month; 
        objDic["DealerCommissionType"] = DealerCommissionType; 
        objDic["CommissionCount"] = CommissionCount; 
        objDic["CommissionAmount"] = CommissionAmount; 
        listDic.Add(objDic); 
       } 
      } 

      reader.Close(); 
     } 
+0

很好,非常感谢:) – Sereen

需要初始化objDic内环路:

var reader = com.ExecuteReader(); 
if (reader.HasRows) { 
    while (reader.Read()) { 
     Dictionary<String, String> objDic = new Dictionary<string, string>(); // MOVED! 
     string CommissionDealerId = reader[0].ToString(); 
     string Month = reader[1].ToString(); 
     string DealerCommissionType = reader[2].ToString(); 
     string CommissionCount = reader[3].ToString(); 
     string CommissionAmount = reader[4].ToString(); 
     objDic["CommissionDealerId"] = CommissionDealerId; 
     objDic["Month"] = Month; 
     objDic["DealerCommissionType"] = DealerCommissionType; 
     objDic["CommissionCount"] = CommissionCount; 
     objDic["CommissionAmount"] = CommissionAmount; 
     listDic.Add(objDic); 
    } 
} 

否则你只是改变了相同的实例一遍。