2012-10-23 6 views
5

Ich habe eine SQL-Tabelle, die wie folgt aussieht:lesen SQL Tabelle in Dictionary <string, List <string[]>>

AAA, Amanda, Anthony 
AAA, Anna, Andrew 
BBB, Boris, Benji 
BBB, Blondie, Bobby 

Ich versuche, einen SQL-Datenleser zu verwenden, um die Daten zu lesen, dann die Ergebnisse einfügen in ein Dictionary<string, List<string[]>>

Das erwartete Ergebnis ist:

[Key] 
    "AAA" 
[Value] 
    "Amanda", "Anthony" 
    "Anna", "Andrew" 
[Key] 
    "BBB" 
[Value] 
    "Boris", "Benji" 
    "Blondie", "Bobby" 

Bitte helfen:

using (SqlConnection cnn = new SqlConnection("connection")) 
{ 
    using (SqlCommand cmd = new SqlCommand("command", cnn)) 
    { 
     using (SqlDataReader rdr = cmd.ExecuteReader()) 
     { 
     while (rdr.Read()) 
      { 
       ... ? 
      } 
     { 
    { 
} 
+0

Sie müssen eine bestimmte Frage stellen. – RBarryYoung

+1

Ich würde ernsthaft darüber nachdenken, ob Sie wirklich mehrere Werte in eine Spalte schreiben wollen, wie Sie es anscheinend tun. Normalerweise kommt ein Punkt die Straße hinunter, wo du es bereuen wirst, dies zu tun ... –

+0

@RBarryYoung: Was meinst du? Ich bitte um Hilfe beim Einfügen von Datensätzen aus einer SQL-Tabelle in ein Dictionary. Warum die -1? – Administrateur

Antwort

0

Etwas ähnliches wie folgt aus:

var dict = new Dictionary<string, List<string[]>>(); 
while (rdr.Read()) 
{ 
    // TODO: extract field1, field2, field3 
    if(dict.ContainsKey(field1)) 
    { 
     // Add the values to the existing list 
     dict[field1].Add(new string [] {field2 , field3}); 
    } 
    else 
    { 
     //Create a new list and set the initial value 
     dict[field1] = new List<string[]> { new string[] { field2 , field3 } }; 
    } 
} 
+0

Vielen Dank für Ihre Hilfe ... – Administrateur

1

Das ist ziemlich einfach, denke ich. Lesen Sie sich Ihre Datentabelle durch und prüfen Sie für jede Zeile, ob [key] in Ihrem Wörterbuch vorhanden ist. Wenn nicht, füge es mit einer neuen Liste hinzu, die deinen [Wert] enthält; Andernfalls fügen Sie den [Wert] zur Liste bei Position [key] hinzu.

Wenn Sie die Datentabelle sortieren, können Sie diese mit einer klassischen Kontrollpaustechnik beschleunigen - für jede neue [Taste] beginnen Sie, eine Liste zu akkumulieren, bis sich die [Taste] ändert, dann fügen Sie [Schlüssel] und Liste hinzu zu deinem Wörterbuch.

+0

Vielen Dank für Ihre Hilfe. – Administrateur

0

So etwas wie vielleicht das?

myDict.Add(rdr["key"].ToString(), rdr["value"].ToString().Split(",").ToList()); 

Ungeprüfte, aber es sollte Sie in die richtige Richtung gehen ...

1
while (rdr.Read()) 
{ 
    if (dictionary.ContainsKey((string)rdr["column1"]){ 
     dictionary[(string)rdr["column1"]].Value.Add(new string[]{(string)rdr["column2"], (string)rdr["column3"]}); 
    } else { 
     dictionary.Add((string)rdr["column1"]), new List<string>()); 
     dictionary[(string)rdr["column1"]].Value.Add(new string[]{(string)rdr["column2"], (string)rdr["column3"]}); 
    } 
} 

Diese funktionieren sollte.

+0

das ist kurz und süß. – RinoTom