2010-11-18 89 views
4

我必須將Status值與「Active」相同的數據集中的所有Id添加到int數組PromotionID中。這怎麼可能。我錯過了什麼?從數據集添加到int數組

int[] promotionID; 
foreach (DataRow dr in ds.Tables[0].Rows[i]["Status"].ToString() == "Active") 
{ 

    promotionID = new int[] { Convert.ToInt32(dr["Id"]) }; 
} 

的錯誤是:

foreach語句不能對 'BOOL' 類型的變量操作,因爲 '布爾' 不包含 '的GetEnumerator'

回答

4

你會想是這樣的:

List<int> promotionLst = new List<int>(); 
foreach (DataRow dr in ds.Tables[0].Rows) { 
    if (dr["Status"].ToString() == "Active") { 
     promotionLst.Add(Convert.ToInt32(dr["Id"])); 
    } 
} 
int[] promotion = promotionLst.ToArray(); 
+0

你值得所有的好友!謝謝:) – Ram 2010-11-18 16:26:12

+0

不客氣。 – 2010-11-18 16:43:58

2

您可以在公共定義在foreach循環中不使用過濾條件。試試這個:

int[] promotion; 
foreach (DataRow dr in ds.Tables[0].Rows) 
{ 
    if (dr["Status"].ToString() == "Active") 
     promotionID = new int[] { Convert.ToInt32(dr["Id"]) }; 
} 

這需要你的問題的錯誤部分的照顧,但你的promotionID使用看上去不正確,因爲你覆蓋它在每個正賽。您應該使用List<int>而不是int[],並使用promotion.Add(Convert.ToInt32(dr["Id"]))將數字添加到列表中。看起來像:

var promotion = new List<int>(); 
foreach (DataRow dr in ds.Tables[0].Rows) 
{ 
    if (dr["Status"].ToString() == "Active") 
     promotion.Add(Convert.ToInt32(dr["Id"])); 
} 

另一種選擇是LINQ作爲Heinzi demonstrated

6

我建議使用LINQ:

int[] promotionIDs = (from dr in ds.Tables[0].AsQueryable() 
         where dr.Field<string>("Status") == "Active" 
         select dr.Field<int>("Id")).ToArray(); 

如果你想解決您的代碼,而不是,讓我告訴你什麼地方錯了:

foreach (DataRow dr in ds.Tables[0].Rows[i]["Status"].ToString() == "Active") 

在什麼地方i來從?你正在使用foreach,所以你不需要計數器變量。你的循環應該看起來像這樣:

foreach (DataRow dr in ds.Tables[0].Rows) { 
    if (dr.Field<string>("Status") == "Active") { 
     ... 
    } 
} 

現在,如何將Id添加到數組中。你在這裏做什麼?

promotionID = new int[] { Convert.ToInt32(dr["Id"]) }; 

...是創造一個價值,這是當前記錄的ID的陣列(那是在它扔掉一切)。數組不是用於添加項目的好數據結構。讓我建議使用,而不是一個列表:

List<int> promotionIDs = new List<int>(); 

foreach (DataRow dr in ds.Tables[0].Rows) { 
    if (dr.Field<string>("Status") == "Active") { 
     promotionIDs.Add(dr.Field<int>("Id")); 
    } 
} 

如果您仍需要一個數組,日後可以轉換:

int[] promotionIDArray = promotionIDs.ToArray(); 
+0

它對我來說完全是一個新概念:) – Ram 2010-11-18 16:12:16