sql >> Databasteknik >  >> RDS >> Sqlserver

Returnera oordnad lista från hierarkiska SQL-data

Med linq2sql kan du göra:

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

Förutsatt att du definierar en Pages-egenskap i PageInfo som:

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

Bearbetningen för att få den i en hierarki sker på webbapplikationssidan, vilket undviker extra belastning på sql-servern. Observera också att denna typ av information är en perfekt kandidat att cache.

Du kan göra renderingen som Rex nämnde. Alternativt kan du expandera lite på den här implementeringen och få den att stödja hierarkigränssnitten och använda asp.net-kontroller.

Uppdatering 1: För renderingsvarianten du frågade om i en kommentar kan du:

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


  1. Kopiera den krypterade kolumnen till en annan databas SQL Server 2012

  2. Problem med att skicka XML-parameter till SQL Server Stored Procedure

  3. Kan jag få anpassat datumformat för plockning(listor) på Laravel5?

  4. hur tilldelar man värde till variabel i uttryck för ett PL/SQL-block?