2012-10-23 21 views
5

मैं एक एसक्यूएल मेज है कि इस तरह दिखता है एक Dictionary<string, List<string[]>>पढ़ें एसक्यूएल टेबल शब्दकोश में <स्ट्रिंग, सूची <string[]>>

उम्मीद परिणाम है:

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

मदद करें:

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

आपको एक विशिष्ट प्रश्न पूछने की आवश्यकता है। – RBarryYoung

+1

मैं कुछ गंभीर विचार दूंगा कि आप वास्तव में एक कॉलम में एकाधिक मान डालना चाहते हैं जैसा कि आप ऐसा करते हैं। आमतौर पर सड़क के नीचे एक बिंदु आता है जहां आपको यह पछतावा होगा ... –

+0

@RBarryYoung: आपका क्या मतलब है? मैं एक एसक्यूएल टेबल से एक शब्दकोश में रिकॉर्ड डालने में मदद के लिए पूछ रहा हूँ। -1 क्यों? – Administrateur

उत्तर

0

कुछ इस के समान:

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

आपकी मदद के लिए धन्यवाद ... – Administrateur

1

यह बहुत आसान है, मुझे लगता है। अपनी डेटा तालिका के माध्यम से पढ़ें, और प्रत्येक पंक्ति के लिए, यह देखने के लिए जांचें कि [कुंजी] आपके शब्दकोश में मौजूद है या नहीं। यदि नहीं, तो इसे अपनी [वैल्यू] वाली एक नई सूची के साथ जोड़ें; अन्यथा, स्थिति [कुंजी] पर सूची में [मान] जोड़ें।

यदि आप डेटा तालिका को सॉर्ट करते हैं, तो आप क्लासिक कंट्रोल ब्रेक तकनीक का उपयोग करके इसे तेज कर सकते हैं - प्रत्येक नई [कुंजी] के लिए, [कुंजी] परिवर्तनों तक एक सूची जमा करना प्रारंभ करें, फिर [कुंजी] और सूची जोड़ें आपके शब्दकोश में

+0

आपकी मदद के लिए धन्यवाद। – Administrateur

0

कुछ इस तरह हो सकता है?

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

untested है, लेकिन यह आप सही दिशा में जा रहा मिलना चाहिए ...

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

यह काम करना चाहिए।

+0

यह छोटा और प्यारा है। – RinoTom