Je suggère d'utiliser LINQ:
int[] promotionIDs = (from dr in ds.Tables[0].AsQueryable()
where dr.Field<string>("Status") == "Active"
select dr.Field<int>("Id")).ToArray();
Si vous voulez fixer votre code à la place, laissez-moi vous dire ce qui ne va pas avec elle:
foreach (DataRow dr in ds.Tables[0].Rows[i]["Status"].ToString() == "Active")
Lorsque le i
ne vient de? Vous utilisez foreach
, vous n'avez donc pas besoin d'une variable de compteur. Votre boucle devrait ressembler à ceci:
foreach (DataRow dr in ds.Tables[0].Rows) {
if (dr.Field<string>("Status") == "Active") {
...
}
}
Maintenant, comment ajouter l'Id à la rangée. Ce que vous faites ici ...
promotionID = new int[] { Convert.ToInt32(dr["Id"]) };
... est de créer un nouveau tableau (jeter tout ce qui était en elle) avec une valeur qui est l'identifiant de l'enregistrement en cours. Les tableaux ne sont pas de bonnes structures de données pour ajouter des éléments. Permettez-moi de vous suggérer d'utiliser une liste à la place:
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"));
}
}
Si vous avez besoin d'un tableau, vous pouvez le convertir ensuite:
int[] promotionIDArray = promotionIDs.ToArray();
Vous méritez tous les points mon pote! Merci :) – Ram
De rien. –