将linq sql结果放入分层结构,以便在无序列表中使用(对于jquery树)

我在L2S类dbml中有5个表:全局>>类别>>子类别>>项目>>项目数据。 我希望能够从Global表中导航到树状结构,以获取项目 – 显示项目数据表中的标题。

我有一个现有的控件,它使用IHierarchyData / IHierarchicalEnumerable扩展集合,迭代集合以输出一个无序列表,然后我将其变成一个带有jquery的树。 我是根据分层sql数据中的Return Un-Ordered List完成的

是否有一种简单的通用方法可以将上表结构中的数据放入一个Hierarchical结构中,这样我就可以重用现有的控件并传入不同的集合。

您是否尝试过嵌套列表视图 ? 我已经在几页中实现了这个解决方案。 我直接使用ObjectDataSources而不是LinqDataSources来保持我的数据逻辑分离,但嵌套的EntitySets工作得很漂亮。

我认为让你感到困惑的是你不需要四张桌来做这件事。

再次从分层sql数据中查看Return无序列表 。 那里没有四张桌子。 只有一个。

您可以使用Union运算符将四个表混合在一起。 http://weblogs.asp.net/zeeshanhirani/archive/2008/04/11/union-operator-part-12.aspx

由于在这种情况下处理不同类型,因此必须在每个类型上实现通用接口以使代码通用。 基本方法是创建一个包含任何所需属性的接口(例如DisplayText,ActionURL等),然后递归迭代该集合。

这是一个粗略的例子:

public interface IDataItem { string DisplayText { get; } string ActionUrl { get; } bool HasChildren { get; } IEnumerable GetChildren(); } public void CreateTree(HtmlTextWriter writer, IEnumerable 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"); } 

您必须在树视图中包含的每个类型上实现接口。 顶级类型和上面方法的集合中的正确传递将沿着层次结构向下遍历,从而创建所需的嵌套列表。