Поместить результаты linq в sql в иерархическую структуру для использования в неупорядоченном списке (для дерева jquery) - PullRequest
2 голосов
/ 15 июля 2009

У меня есть 5 таблиц в классах L2S dbml: Global >> Categories >> Sub-Category >> Item >> Item Data. Я хочу иметь возможность перемещаться по глобальной таблице вниз по древовидной структуре, чтобы добраться до элементов - отображать заголовок из таблицы данных элементов.

У меня есть существующий элемент управления, который использует расширенную коллекцию IHierarchyData / IHierarchicalEnumerable путем итерации по коллекции, чтобы вывести неупорядоченный список, который я затем превращаю в дерево с помощью jquery. Я сделал это на основе Вернуть неупорядоченный список из иерархических данных SQL

Есть ли простой общий способ, которым я мог бы использовать, чтобы поместить данные из приведенной выше структуры таблицы в иерархическую структуру, чтобы я мог повторно использовать свой существующий элемент управления и просто передать другую коллекцию.

Ответы [ 4 ]

1 голос
/ 22 сентября 2009

Вы пробовали Вложенные списки ? Я реализовал это решение на нескольких страницах. Я использую ObjectDataSources вместо LinqDataSources напрямую, чтобы разделить логику данных, но вложенные EntitySets прекрасно работают.

0 голосов
/ 12 октября 2009

Поскольку в этом случае вы имеете дело с разными типами, вам придется реализовать общий интерфейс для каждого из них, чтобы сделать код универсальным. Основной подход заключается в создании интерфейса, который включает в себя любые необходимые свойства (например, DisplayText, ActionURL и т. Д.), А затем рекурсивно выполняет итерацию по коллекции.

Вот пример:

 public interface IDataItem
    {
        string DisplayText { get; }
        string ActionUrl { get;  }
        bool HasChildren { get; }
        IEnumerable<IDataItem> GetChildren();
    }

 public void CreateTree(HtmlTextWriter writer, IEnumerable<IDataItem> collection)
    {
        writer.WriteFullBeginTag("ul");
        foreach (var data in collection)
        {
            writer.WriteFullBeginTag("li");
            writer.WriteBeginTag("a");
            writer.WriteAttribute("href",data.ActionUrl);
            writer.Write(HtmlTextWriter.TagRightChar);
            writer.Write(data.DisplayText);
            writer.WriteEndTag("a");
            if(data.HasChildren)
                CreateTree(writer, data.GetChildren());
            writer.WriteEndTag("li");
        }
        writer.WriteEndTag("ul");
    }

Вам нужно будет реализовать интерфейс для каждого из ваших типов, которые вы хотите включить в древовидную структуру. Простой переход в коллекцию типа верхнего уровня и метода, описанного выше, пройдет по иерархии, создавая необходимый вложенный список.

0 голосов
/ 18 июля 2009

Вы можете использовать оператор Union, чтобы объединить четыре таблицы. http://weblogs.asp.net/zeeshanhirani/archive/2008/04/11/union-operator-part-12.aspx

0 голосов
/ 17 июля 2009

Я думаю, что вас вешает, что вам не нужны четыре стола для этого.

Посмотрите на Вернуть неупорядоченный список из иерархических данных sql снова. Там нет четырех столов. Здесь только один.

...