2012-10-23 15 views
5

Ho una tabella SQL che assomiglia a questo:Leggi SQL tabella in Dictionary <string, Lista <string[]>>

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

Sto cercando di utilizzare un lettore di dati SQL per leggere i dati quindi inserire i risultati in un Dictionary<string, List<string[]>>

Il risultato atteso è:

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

Aiutateci:

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

È necessario porre una domanda specifica. – RBarryYoung

+1

Vorrei riflettere seriamente se vuoi davvero inserire più valori in una colonna come sembra che tu stia facendo. Di solito arriva un punto lungo la strada dove ti pentirai di fare questo ... –

+0

@RBarryYoung: Cosa intendi? Sto chiedendo aiuto per inserire record da una tabella SQL in un dizionario. Perché il -1? – Administrateur

risposta

0

Qualcosa di simile a questo:

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

Grazie per il vostro aiuto ... – Administrateur

1

Questo è piuttosto semplice, penso. Leggere la tabella dei dati e, per ciascuna riga, verificare se [chiave] esiste nel dizionario. In caso contrario, aggiungilo con una nuova lista contenente il tuo [valore]; in caso contrario, aggiungere il [valore] all'Elenco nella posizione [chiave].

Se si ordina la tabella di dati, è possibile accelerare utilizzando una tecnica classica di interruzione di controllo - per ogni nuova [chiave], iniziare ad accumulare un elenco finché la [chiave] cambia, quindi aggiungere la [chiave] e l'elenco al tuo dizionario

+0

Grazie per il vostro aiuto. – Administrateur

0

Qualcosa di simile forse?

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

testato, ma dovrebbe farti andare nella giusta direzione ...

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

Questo dovrebbe funzionare.

+0

questo è breve e dolce. – RinoTom

Problemi correlati