C# 将项目分组到父项->;儿童->;外孙关系

C# 将项目分组到父项->;儿童->;外孙关系,c#,.net,linq,c#-3.0,C#,.net,Linq,C# 3.0,我的课程如下: public class Item { public int ItemID { get; set; } public int GroupLevel { get; set; } public string ItemName { get; set; } public string ItemDesc { get; set; } } 这将返回一个展平IEnumerable结果,但我需要根据GroupLeve

我的课程如下:

public class Item
    {
        public int ItemID { get; set; }
        public int GroupLevel { get; set; }
        public string ItemName { get; set; }
        public string ItemDesc { get; set; }
    }
这将返回一个展平IEnumerable结果,但我需要根据GroupLevel和ItemID将它们分组到父->子->孙子关系中。以下是当前数据的外观:

ItemID:     1
GroupLevel: 1
ItemName:   All Groups
ItemDesc:   Item 1 description
ParentID:   null

ItemID:     2
GroupLevel: 2
ItemName:   Boulder
ItemDesc:   Boulder description
ParentID:   1

ItemID:     3
GroupLevel: 2
ItemName:   Atlanta
ItemDesc:   Atlanta description
ParentID:   1

ItemID:     4
GroupLevel: 3
ItemName:   Boulder - Boulder south
ItemDesc:   Grand-child of Boulder (ID: 2)
ParentID:   2

ItemID:     5
GroupLevel: 3
ItemName:   Boulder - Boulder North
ItemDesc:   Another grand-child of Boulder (ID: 2)
ParentID:   2

ItemID:     6
GroupLevel: 3
ItemName:   Atlanta - West
ItemDesc:   Grand-child of Atlanta (ID: 3)
ParentID:   3
我希望数据的结构如下:

ItemID:     1
GroupLevel: 1
ItemName:   All Groups
ItemDesc:   Item 1 description
ParentID:       null

    ItemID:     2
    GroupLevel: 2
    ItemName:   Boulder
    ItemDesc:   Boulder description
    ParentID:       1

        ItemID:     4
        GroupLevel: 3
        ItemName:   Boulder - Boulder south
        ItemDesc:   Grand-child of Boulder (ID: 2)
        ParentID:       2

        ItemID:     5
        GroupLevel: 3
        ItemName:   Boulder - Boulder North
        ItemDesc:   Another grand-child of Boulder (ID: 2)
        ParentID:       2


    ItemID:     3
    GroupLevel: 2
    ItemName:   Atlanta
    ItemDesc:   Atlanta description
    ParentID:       1

        ItemID:     6
        GroupLevel: 3
        ItemName:   Atlanta - West
        ItemDesc:   Grand-child of Atlanta (ID: 3)
        ParentID:       3
    List<Item> itemlist;
    List<Item> newItemList;

    public void main()
    {
        //Find all root items (aka, no parents)
        foreach (Item item in itemlist)
        {
            if (item.Parent == null) getObjects(item.ID, 0);
        }
    }

    public void getObjects(Item me, int deep)
    {
        //Store node
        Console.WriteLine("this is me: " + me.ID);
        Console.WriteLine("I am this many levels deep: " + deep);
        newItemList.Insert(me);

        //Find my children
        foreach (Item item in itemlist)
        {
            if (item.Parent == me.ID) getObjects(item.ID, (deep + 1));
        }
    }

有什么建议吗?谢谢。

你的意思是这样的:

ItemID:     1
GroupLevel: 1
ItemName:   All Groups
ItemDesc:   Item 1 description
ParentID:       null

    ItemID:     2
    GroupLevel: 2
    ItemName:   Boulder
    ItemDesc:   Boulder description
    ParentID:       1

        ItemID:     4
        GroupLevel: 3
        ItemName:   Boulder - Boulder south
        ItemDesc:   Grand-child of Boulder (ID: 2)
        ParentID:       2

        ItemID:     5
        GroupLevel: 3
        ItemName:   Boulder - Boulder North
        ItemDesc:   Another grand-child of Boulder (ID: 2)
        ParentID:       2


    ItemID:     3
    GroupLevel: 2
    ItemName:   Atlanta
    ItemDesc:   Atlanta description
    ParentID:       1

        ItemID:     6
        GroupLevel: 3
        ItemName:   Atlanta - West
        ItemDesc:   Grand-child of Atlanta (ID: 3)
        ParentID:       3
    List<Item> itemlist;
    List<Item> newItemList;

    public void main()
    {
        //Find all root items (aka, no parents)
        foreach (Item item in itemlist)
        {
            if (item.Parent == null) getObjects(item.ID, 0);
        }
    }

    public void getObjects(Item me, int deep)
    {
        //Store node
        Console.WriteLine("this is me: " + me.ID);
        Console.WriteLine("I am this many levels deep: " + deep);
        newItemList.Insert(me);

        //Find my children
        foreach (Item item in itemlist)
        {
            if (item.Parent == me.ID) getObjects(item.ID, (deep + 1));
        }
    }
列表项列表;
列出新项目列表;
公共图书馆
{
//查找所有根项目(又名,无父项)
foreach(项目列表中的项目)
{
如果(item.Parent==null)getObjects(item.ID,0);
}
}
public void getObjects(Item me,int deep)
{
//存储节点
Console.WriteLine(“这是我:+me.ID”);
WriteLine(“我有这么多层次的深度:“+deep”);
新项目列表。插入(我);
//找到我的孩子
foreach(项目列表中的项目)
{
if(item.Parent==me.ID)getObjects(item.ID,(deep+1));
}
}

你的意思是这样的吗:

ItemID:     1
GroupLevel: 1
ItemName:   All Groups
ItemDesc:   Item 1 description
ParentID:       null

    ItemID:     2
    GroupLevel: 2
    ItemName:   Boulder
    ItemDesc:   Boulder description
    ParentID:       1

        ItemID:     4
        GroupLevel: 3
        ItemName:   Boulder - Boulder south
        ItemDesc:   Grand-child of Boulder (ID: 2)
        ParentID:       2

        ItemID:     5
        GroupLevel: 3
        ItemName:   Boulder - Boulder North
        ItemDesc:   Another grand-child of Boulder (ID: 2)
        ParentID:       2


    ItemID:     3
    GroupLevel: 2
    ItemName:   Atlanta
    ItemDesc:   Atlanta description
    ParentID:       1

        ItemID:     6
        GroupLevel: 3
        ItemName:   Atlanta - West
        ItemDesc:   Grand-child of Atlanta (ID: 3)
        ParentID:       3
    List<Item> itemlist;
    List<Item> newItemList;

    public void main()
    {
        //Find all root items (aka, no parents)
        foreach (Item item in itemlist)
        {
            if (item.Parent == null) getObjects(item.ID, 0);
        }
    }

    public void getObjects(Item me, int deep)
    {
        //Store node
        Console.WriteLine("this is me: " + me.ID);
        Console.WriteLine("I am this many levels deep: " + deep);
        newItemList.Insert(me);

        //Find my children
        foreach (Item item in itemlist)
        {
            if (item.Parent == me.ID) getObjects(item.ID, (deep + 1));
        }
    }
列表项列表;
列出新项目列表;
公共图书馆
{
//查找所有根项目(又名,无父项)
foreach(项目列表中的项目)
{
如果(item.Parent==null)getObjects(item.ID,0);
}
}
public void getObjects(Item me,int deep)
{
//存储节点
Console.WriteLine(“这是我:+me.ID”);
WriteLine(“我有这么多层次的深度:“+deep”);
新项目列表。插入(我);
//找到我的孩子
foreach(项目列表中的项目)
{
if(item.Parent==me.ID)getObjects(item.ID,(deep+1));
}
}

我认为这对您很有用


您可以阅读示例,并根据需要创建父->子->孙子关系树……

我认为这对您很有用

您可以阅读示例,并根据需要创建父->子->孙子关系树