5

次のようなSQLテーブルがあります。

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

SQLデータリーダーを使用してデータを読み取り、結果をに挿入しようとしています。Dictionary<string, List<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())
            {
               ... ?
            }
      {
   {
}
4

4 に答える 4

1

これはとても簡単だと思います。データテーブルを読み、各行について、[key]がディクショナリに存在するかどうかを確認します。そうでない場合は、[値]を含む新しいリストを追加します。それ以外の場合は、[値]をリストの[キー]の位置に追加します。

データテーブルを並べ替える場合は、従来のコントロールブレーク手法を使用してこれを高速化できます。新しい[キー]ごとに、[キー]が変わるまでリストの蓄積を開始し、[キー]とリストを辞書に追加します。

于 2012-10-23T20:24:49.157 に答える
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"]});
    }
}

これは機能するはずです。

于 2012-10-23T20:32:59.413 に答える
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 } };
     }
 }
于 2012-10-23T20:26:30.187 に答える
0

多分このような何か?

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

テストされていませんが、正しい方向に進むはずです...

于 2012-10-23T20:27:26.197 に答える