gpt4 book ai didi

asp.net - 从分层 sql 数据返回无序列表

转载 作者:太空宇宙 更新时间:2023-11-04 14:25:08 25 4
gpt4 key购买 nike

我有一个包含 pageId、parentPageId、标题列的表。

有没有办法使用 asp.net、cte、存储过程、UDF...返回无序列表?

表格如下所示:

PageID    ParentId    Title
1 null Home
2 null Products
3 null Services
4 2 Category 1
5 2 Category 2
6 5 Subcategory 1
7 5 SubCategory 2
8 6 Third Level Category 1
...

结果应该是这样的:

Home
Products
Category 1
SubCategory 1
Third Level Category 1
SubCategory 2
Category 2
Services

理想情况下,列表应包含 <a>标签也是,但我希望如果我找到创建 <ul> 的方法,我可以自己添加它列表。

编辑 1: 我认为已经有解决方案,但似乎没有。我想尽可能保持简单,不惜一切代价避免使用 ASP.NET 菜单,因为它默认使用表格。然后我必须使用 CSS 适配器等。

即使我决定走“ASP.NET 菜单”路线,我也只能找到这种方法:http://aspalliance.com/822它使用 DataAdapter 和 DataSet :(

还有更现代或更高效的方法吗?

最佳答案

使用 linq2sql 你可以这样做:

List<PageInfo> GetHierarchicalPages()
{
var pages = myContext.PageInfos.ToList();
var parentPages = pages.Where(p=>p.ParentId == null).ToList();
foreach(var page in parentPages)
{
BuildTree(
page,
p=> p.Pages = pages.Where(child=>p.pageId == child.ParentId).ToList()
);
}
}
void BuildTree<T>(T parent, Func<T,List<T>> setAndGetChildrenFunc)
{
foreach(var child in setAndGetChildrenFunc(parent))
{
BuildTree(child, setAndGetChildrenFunc);
}
}

假设您在 PageInfo 中定义了一个 Pages 属性,例如:

public partial class PageInfo{
public List<PageInfo> Pages{get;set;}
}

将其置于层次结构中的处理发生在 web 应用程序端,这避免了 sql server 上的额外负载。另请注意,此类信息非常适合缓存。

您可以像 Rex 提到的那样进行渲染。或者,您可以对此实现进行一些扩展,使其支持层次结构接口(interface)并使用 asp.net 控件。

更新 1:对于您在评论中询问的渲染变体,您可以:

var sb = new System.IO.StringWriter();
var writer = new HtmlTextWriter(sb);
// rex's rendering code
var html = sb.ToString();

关于asp.net - 从分层 sql 数据返回无序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/636943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com