2012-10-23 13 views
5

Mam tabeli SQL, który wygląda tak:Czytaj SQL Tabela do Dictionary <string, List <string[]>>

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

Próbuję użyć czytnika danych SQL do odczytu danych, a następnie włóż do wyników Dictionary<string, List<string[]>>

Oczekiwany wynik to:

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

Proszę o pomoc:

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

Musisz zadać konkretne pytanie. – RBarryYoung

+1

Chciałbym zastanowić się, czy naprawdę chcesz umieścić wiele wartości w jednej kolumnie, jak się wydaje. Zwykle nadchodzi moment, w którym będziesz żałować, że to zrobisz ... –

+0

@RBarryYoung: Co masz na myśli? Proszę o pomoc w wstawianiu rekordów z tabeli SQL do słownika. Dlaczego -1? – Administrateur

Odpowiedz

0

Coś podobnego do tego:

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

Dziękuję za pomoc ... – Administrateur

1

Myślę, że to bardzo proste. Przeczytaj tabelę danych i dla każdego wiersza sprawdź, czy [klucz] istnieje w twoim słowniku. Jeśli nie, dodaj go do nowej listy zawierającej twoją [wartość]; w przeciwnym razie dodaj [wartość] do listy w pozycji [klawisz].

Jeśli sortujesz tabelę danych, możesz przyspieszyć ją za pomocą klasycznej techniki łamania kontrolnego - dla każdego nowego [klawisza], zacznij gromadzić listę aż zmieni się [klucz], następnie dodaj [klucz] i listę do słownika.

+0

Dziękuję za pomoc. – Administrateur

0

Coś takiego może być?

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

Nietestowane, ale powinien dostać idziesz w dobrym kierunku ...

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

to powinno działać.

+0

to jest krótkie i słodkie. – RinoTom

Powiązane problemy