2010-11-18 16 views
4

Ich muss die ID aus dem Dataset hinzufügen, das den Statuswert "Active" hat, zum Array PromotionID des int-Arrays. Wie ist das möglich. Was vermisse ich?Zum int-Array aus Dataset hinzufügen

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

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

Der Fehler ist:

foreach-Anweisung auf Variablen des Typs nicht arbeiten kann 'Bool', weil 'Bool' keine öffentliche Definition enthält für 'GetEnumerator'

Antwort

4

Sie wollen etwas wie folgt:

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

Sie verdienen alle Punkte Kumpel! Danke :) – Ram

+0

Gern geschehen. –

2

Sie können Benutze keine Filterbedingung in der foreach-Schleife. Versuchen Sie folgendes:

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

, die Pflege des Fehler Teil Ihrer Frage kommt, aber die Nutzung von promotionID falsch aussieht, da Sie es auf jeder positive Übereinstimmung überschrieben werden. Sie sollten List<int> anstelle von int[] verwenden und promotion.Add(Convert.ToInt32(dr["Id"])) verwenden, um Nummern zur Liste hinzuzufügen. Das sieht aus wie:

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

Eine weitere Option LINQ als Heinzi demonstrated ist.

6

Ich schlage vor, LINQ zu verwenden:

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

Wenn Sie Ihren Code statt reparieren wollen, lassen Sie mich Ihnen sagen, was mit ihm los ist:

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

Wo kommt die i kommen von? Sie verwenden foreach, so dass Sie keine Zählervariable benötigen. Ihre Schleife sollte so aussehen:

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

Nun, wie Sie die ID zum Array hinzufügen. Was machst du hier ...

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

... ist ein neue Array (Wegwerfen alles, was darin war) zu schaffen, mit einem Wert, der die Id des aktuellen Datensatzes ist. Arrays sind keine guten Datenstrukturen zum Hinzufügen von Elementen. Lassen Sie mich vorschlagen, eine Liste zu verwenden, anstatt:

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

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")); } } 

Wenn Sie noch ein Array benötigen, können Sie es später konvertieren Es ist komplett ein neues Konzept für mich :) – Ram

Verwandte Themen