Сгруппировать элемент в Parent -> Child -> Отношения Grand-child - PullRequest
1 голос
/ 15 июля 2011

У меня есть класс следующим образом:

public class Item
    {
        public int ItemID { get; set; }
        public int GroupLevel { get; set; }
        public string ItemName { get; set; }
        public string ItemDesc { get; set; }
    }

Это возвращает плоский результат IEnumerable, но мне нужно сгруппировать их в отношения Parent -> Child -> Grand-child, основанные на 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

Есть предложения?Спасибо.

Ответы [ 2 ]

1 голос
/ 15 июля 2011

Вы имеете в виду что-то вроде этого:

    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));
        }
    }
0 голосов
/ 15 июля 2011

Я думаю, что это полезно для вас

linq-groupbymany-динамически

Вы можете прочитать образец и создать Parent -> Child -> Grand-дерево дочерних отношений, как вам нравится .....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...