Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ungeordnete Liste aus hierarchischen SQL-Daten zurückgeben

Mit linq2sql könnten Sie Folgendes tun:

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);
   }
}

Angenommen, Sie definieren eine Pages-Eigenschaft in der PageInfo wie:

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

Die Verarbeitung, um es in eine Hierarchie zu bringen, erfolgt auf der Seite der Webanwendung, wodurch eine zusätzliche Belastung des SQL-Servers vermieden wird. Beachten Sie auch, dass diese Art von Informationen ein perfekter Kandidat zum Zwischenspeichern ist.

Sie können das Rendern wie von Rex erwähnt durchführen. Alternativ könnten Sie diese Implementierung etwas erweitern und dafür sorgen, dass sie die Hierarchieschnittstellen unterstützt und asp.net-Steuerelemente verwendet.

Aktualisierung 1: Für die Rendering-Variante, die Sie in einem Kommentar angefragt haben, können Sie:

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