2012-10-23 29 views
5

Tôi có một bảng SQL trông như thế này:đọc SQL Bảng thành Dictionary <string, Danh sách <string[]>>

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

Tôi đang cố gắng sử dụng một trình đọc dữ liệu SQL để đọc dữ liệu sau đó chèn kết quả vào một Dictionary<string, List<string[]>>

kết quả dự kiến ​​là:

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

Xin giúp:

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

Bạn cần đặt câu hỏi cụ thể. – RBarryYoung

+1

Tôi sẽ đưa ra một số suy nghĩ nghiêm túc về việc liệu bạn có thực sự muốn đặt nhiều giá trị trong một cột như bạn đang làm. Thông thường có một điểm xuống con đường mà bạn sẽ hối tiếc làm điều này ... –

+0

@ RBarryYoung: Ý bạn là gì? Tôi yêu cầu giúp đỡ chèn bản ghi từ một bảng SQL vào một từ điển. Tại sao -1? – Administrateur

Trả lời

0

Something tương tự như sau:

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

Cảm ơn sự giúp đỡ của bạn ... – Administrateur

1

Điều này khá đơn giản, tôi nghĩ vậy. Đọc qua bảng dữ liệu của bạn và cho mỗi hàng, hãy kiểm tra xem [key] có tồn tại trong từ điển của bạn hay không. Nếu không, hãy thêm nó với một Danh sách mới chứa [giá trị] của bạn; nếu không, hãy thêm [giá trị] vào Danh sách tại vị trí [khóa].

Nếu bạn sắp xếp bảng dữ liệu, bạn có thể tăng tốc độ này bằng kỹ thuật ngắt kiểm soát cổ điển - cho mỗi [phím mới], bắt đầu tích lũy Danh sách cho đến khi [phím] thay đổi, sau đó thêm [khóa] và Danh sách vào từ điển của bạn.

+0

Cảm ơn sự giúp đỡ của bạn. – Administrateur

0

Something như thế này có lẽ?

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

chưa được kiểm tra, nhưng nó sẽ giúp bạn đi đúng hướng ...

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

này nên làm việc.

+0

điều này thật ngắn và ngọt ngào. – RinoTom

Các vấn đề liên quan