如何将数据从SQL加载到在Treeview中显示的日期表

时间:2019-01-02 10:12:53

标签: c# sql

我有一个chartTable,其中有2列:

ChildPersonID | ParentPersonID
--------------+-----------------
 1            | 2
 1            | 3
 2            | 4

该列与personTable有2列:

ID | PersonName
---+-----------------
1  | a
2  | b
3  | c
4  | d

我想要一个选择查询,该查询用在Treeview中显示的PersonName填充数据表

结果:

parentname | parentid | childname | childid
-----------+----------+-----------+---------
a          |    1     | b         |    2
a          |    1     | c         |    3
b          |    2     | d         |    4

我的代码

DECLARE @Table1 TABLE (ChildPersonID  INT,ParentPersonID INT)
DECLARE @Table2 TABLE (ID INT, PersonName VARCHAR(10))
INSERT INTO @Table1 VALUES (1,2),(1,3),(2,4)
INSERT INTO @Table2 VALUES (1,'a'),(2,'b'),(3,'c'),(4,'d')

SELECT T3.PersonName AS parentName, T1.ChildPersonID AS ParentId,
       T2.PersonName AS childname, T1.ParentPersonID AS childid
FROM @Table1 T1 
INNER JOIN @Table2 T2 ON T1.ParentPersonID = T2.Id 
INNER JOIN @Table2 T3 ON T2.ChildPersonID = T3.id

2 个答案:

答案 0 :(得分:1)

这是您要查找的查询(尽管您提到的列名令人困惑,但我认为应该将其反转)

DECLARE @Table1 TABLE (ChildPersonID  INT,ParentPersonID INT)
DECLARE @Table2 TABLE (ID INT, PersonName VARCHAR(10))

INSERT INTO @Table1 VALUES (1,2),(1,3),(2,4)
INSERT INTO @Table2 VALUES (1,'a'),(2,'b'),(3,'c'),(4,'d')


    SELECT T3.PersonName AS parentName, T1.ChildPersonID AS ParentId,
           T2.PersonName AS childname, T1.ParentPersonID AS childid
    FROM @Table1 T1 
    INNER JOIN @Table2 T2 ON T1.ParentPersonID = T2.Id 
    INNER JOIN @Table2 T3 ON T1.ChildPersonID = T3.id

答案 1 :(得分:1)

请参见下面的代码:

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Data;

namespace ConsoleApplication94
{
    class Program
    {
        static void Main(string[] args)
        {

            DataTable dt = new DataTable();
            dt.Columns.Add("parentname", typeof(string));
            dt.Columns.Add("parentid", typeof(int));
            dt.Columns.Add("childname", typeof(string));
            dt.Columns.Add("childid", typeof(int));

            DataTable dtChildPerson = new DataTable();
            dtChildPerson.Columns.Add("ChildPersonID", typeof(int));
            dtChildPerson.Columns.Add("ParentPersonID", typeof(int));
            dtChildPerson.Rows.Add(new object[] { 1, 1 });
            dtChildPerson.Rows.Add(new object[] { 1, 3 });
            dtChildPerson.Rows.Add(new object[] { 2, 4 });

            DataTable personName = new DataTable();
            personName.Columns.Add("ID", typeof(int));
            personName.Columns.Add("PersonName", typeof(string));
            personName.Rows.Add(new object[] { 1, "a" });
            personName.Rows.Add(new object[] { 2, "b" });
            personName.Rows.Add(new object[] { 3, "c" });
            personName.Rows.Add(new object[] { 4, "d" });


            foreach (DataRow row in dtChildPerson.AsEnumerable())
            {
                int parentID = row.Field<int>("ParentPersonID");
                string parentName = personName.AsEnumerable().Where(x => x.Field<int>("ID") == parentID).Select(x => x.Field<string>("PersonName")).FirstOrDefault();
                int childID = row.Field<int>("ChildPersonID");

                foreach(DataRow childRow in personName.AsEnumerable().Where(x => x.Field<int>("ID") == childID))
                {
                    string childName = childRow.Field<string>("PersonName");

                    dt.Rows.Add(new object[] { parentName, parentID, childName, childID });
                }

            }
        }
    }
}