Дозвуковая 3 и Модель Смежности - PullRequest
0 голосов
/ 08 июня 2009

Если к таблице применяется модель смежности (ID, ParentID), как можно вернуть иерархию в Subsonic 3?

Ответы [ 3 ]

2 голосов
/ 08 июня 2009

Все классы являются частичными, поэтому создайте новый частичный для вашего класса (скажем, «Category») и создайте дочернюю коллекцию (назовите ее SubCategories). Затем, когда вы загружаете свой объект в память, вы можете загрузить подколлекцию:

var allCategories=Categories.All().ToList();
allCategories.ForEach(x=>x.SubCategories=allCategories.Where(y=>y.CategoryID==x.ParentID));

Это от руки, но это идея.

1 голос
/ 09 июня 2009

Это то, что у меня есть благодаря Робу, но мне интересно, нужна ли еще рекурсивная функция? Есть ли альтернатива LINQ?

        var allCategories = Table_1.All().ToList();
        allCategories.ForEach(x => x.Children = allCategories.Where(y => y.ParentID == x.ID));

        var topLevel = allCategories.Where(f => f.ParentID == 0);

        s.AppendLine("<ul>");
        DoStuff(topLevel);
        s.AppendLine("</ul>");

        private void DoStuff(IEnumerable<Table_1> toplevel)
        {
           foreach (var lve in toplevel)
           {
            s.AppendLine("<li>"+lve.Title);
            if (lve.Children.Count() > 0)
            {
                s.AppendLine("<ul>");
                DoStuff(lve.Children);
                s.AppendLine("</ul>");
            }
            s.AppendLine("</li>");
            }
        }
1 голос
/ 08 июня 2009

Я использую это все время. Просто прочитайте все строки. Это то, что вы делаете со строками позже, имеет значение. Я передаю их в дерево управления DevExpress, которое автоматически выделяет идентификатор и ParentID, чтобы показать дерево. Или с помощью нескольких строк рекурсии вы можете пройти по дереву и делать все, что вам нравится.

var result = от p в _db. Продукты выберите p;

...