2010-11-18 68 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