1

これらのデータを含むテーブルがあります

State       Cities

 TX         Houston
 TX         San Antonio
 TX         Austin
 TX         Austin
 PA         Philadelphia
 PA         Pitssburgh
 PA         Pittsburgh
 PA         
 CO         Boulder
 CO         Denver

これらの 3 つの州をノードとして、それぞれの都市を葉として持つツリーを実装しようとしています。

C# でリストを作成しています。

            comd.CommandText = "SELECT * FROM MyTable";

            con.Open();
            SqlDataReader reader = comd.ExecuteReader();
            while (reader.Read())
            {
                City myData = new City();
                myData.State = reader["State"].ToString().Trim();
                myData.Cities = reader["Cities"].ToString().Trim();
                giveData.Add(myData);
            }  
            int count = 1;
            List<TreeNode> myNode = new List<TreeNode>();
            foreach (City myData in giveData)
            {
                TreeNode treeNode = new TreeNode();
                treeNode.id = count++;
                treeNode.name = myData.State;
                treeNode.leaf = false;

                List<TreeNode> Level1 = new List<TreeNode>();
                if (mydata.Cities != null)
                {
                    if (mydata.Cities!= "")
                    {
                        foreach (City State in result)
                        {
                            TreeNode node1 = new TreeNode();
                            node1.id = count++;
                            node1.name = myData.Cities;
                            node1.leaf = true;

                            Level1.Add(node1);
                         }
                     }
                }
                treeNode.children = Level1;
                myNode.Add(treeNode);
            }

            return JsonConvert.SerializeObject(myNode);

私が得ているのは、ツリー ノードとして 4 つの TX と PA、および 2 つの CO であり、TX ノードの下に 2 つの Austin...

2 つの都市がある場合、1 つの TX、1 つの PA、1 つの CO、および 1 つの都市のみを取得するように、リストを実装するにはどうすればよいですか...

4

1 に答える 1

1

私はそれをテストできませんでしたが、それはそれを行う必要があります:

comd.CommandText = "SELECT * FROM MyTable";

con.Open();
SqlDataReader reader = comd.ExecuteReader();
while (reader.Read())
{
    City myData = new City();
    myData.State = reader["State"].ToString().Trim();
    myData.Cities = reader["Cities"].ToString().Trim();
    giveData.Add(myData);
}  
int count = 1;
Dictionary<string, TreeNode> result = new Dictionary<string, TreeNode>();
foreach (City myData in giveData) 
{
    if (result.ContainsKey(myData.State ))
    {
        result[myData.State].children.Add(new TreeNode() {
            id = count++,
            name = myData.Cities,
            leaf = true
        });
    }
    else
    {
        result.add(giveData.State, new TreeNode() {
            id = count++,
            name = myData.State,
            leaf = false,
            children = new List<TreeNode>()
        });
    }
}

return JsonConvert.SerializeObject(result.Values);
于 2012-12-21T21:09:07.460 に答える