Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将SQL表读入字典<;字符串,列表<;字符串[]>&燃气轮机;_C#_.net_Vb.net_List_Data Dictionary - Fatal编程技术网

C# 将SQL表读入字典<;字符串,列表<;字符串[]>&燃气轮机;

C# 将SQL表读入字典<;字符串,列表<;字符串[]>&燃气轮机;,c#,.net,vb.net,list,data-dictionary,C#,.net,Vb.net,List,Data Dictionary,我有一个如下所示的SQL表: AAA, Amanda, Anthony AAA, Anna, Andrew BBB, Boris, Benji BBB, Blondie, Bobby 我正在尝试使用SQL数据读取器读取数据,然后将结果插入到字典中 预期结果是: [Key] "AAA" [Value] "Amanda", "Anthony" "Anna", "Andrew" [Key] "BBB" [Value] "Boris", "Benji" "Blond

我有一个如下所示的SQL表:

AAA, Amanda, Anthony
AAA, Anna, Andrew
BBB, Boris, Benji
BBB, Blondie, Bobby
我正在尝试使用SQL数据读取器读取数据,然后将结果插入到
字典中

预期结果是:

[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())
            {
               ... ?
            }
      {
   {
}

我认为这很简单。通读您的数据表,对于每一行,检查字典中是否存在[key]。如果没有,则添加一个包含您的[值]的新列表;否则,将[value]添加到位置[key]处的列表中


如果您对数据表进行排序,您可以使用一种经典的控制中断技术来加快排序速度——对于每个新的[key],开始累积一个列表,直到[key]发生变化,然后将[key]和列表添加到字典中。

类似于此:

 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 } };
     }
 }
var dict=newdictionary();
while(rdr.Read())
{
//TODO:提取字段1、字段2、字段3
if(dict.ContainsKey(字段1))
{
//将这些值添加到现有列表中
dict[field1].Add(新字符串[]{field2,field3});
}
其他的
{
//创建新列表并设置初始值
dict[field1]=新列表{newstring[]{field2,field3};
}
}

可能是这样的吧

myDict.Add(rdr["key"].ToString(), rdr["value"].ToString().Split(",").ToList());
未经测试,但它应该让您朝着正确的方向前进…

while(rdr.Read())
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"]});
    }
}
{ if(dictionary.ContainsKey((string)rdr[“column1”]){ 字典[(字符串)rdr[“column1”]].Value.Add(新字符串[]{(字符串)rdr[“column2”],(字符串)rdr[“column3”]}); }否则{ Add((string)rdr[“column1”]),newlist(); 字典[(字符串)rdr[“column1”]].Value.Add(新字符串[]{(字符串)rdr[“column2”],(字符串)rdr[“column3”]}); } }

这应该是可行的。

您需要问一个特定的问题。我会认真考虑您是否真的希望像您看起来那样将多个值放在一列中。通常情况下,你会后悔做了这件事……@rbaryyoung:你是什么意思?我请求帮助将SQL表中的记录插入字典。为什么是-1?@AbeMiessler:“通常情况下,当你想要将你创建的隐含亲子关系视为实际的亲子关系时,你会后悔这样做……”。带有示例的答案太大,无法包含在评论中。这可能是一个很好的问题。。。