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);
}
}
मान लें कि आप पेजइन्फो में एक पेज प्रॉपर्टी को परिभाषित करते हैं जैसे:
public partial class PageInfo{
public List<PageInfo> Pages{get;set;}
}
इसे पदानुक्रम पर प्राप्त करने के लिए प्रसंस्करण वेब अनुप्रयोग पक्ष पर हो रहा है, जो एसक्यूएल सर्वर पर अतिरिक्त भार से बचाता है। यह भी ध्यान दें कि इस प्रकार की जानकारी कैश करने के लिए एक आदर्श उम्मीदवार है।
आप रेक्स के बताए अनुसार रेंडर कर सकते हैं। वैकल्पिक रूप से आप इस कार्यान्वयन पर थोड़ा विस्तार कर सकते हैं और इसे पदानुक्रम इंटरफेस का समर्थन कर सकते हैं और एएसपीनेट नियंत्रण का उपयोग कर सकते हैं।
अपडेट 1: किसी टिप्पणी पर आपके द्वारा पूछे गए प्रतिपादन भिन्नता के लिए, आप यह कर सकते हैं:
var sb = new System.IO.StringWriter();
var writer = new HtmlTextWriter(sb);
// rex's rendering code
var html = sb.ToString();