sql >> Database teknologi >  >> RDS >> Sqlserver

Returner uordnet liste fra hierarkiske sql-data

Ved at bruge linq2sql kunne du gøre:

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

Forudsat at du definerer en Pages-egenskab i PageInfo som:

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

Behandlingen for at få det på et hierarki sker på webapplikationssiden, hvilket undgår ekstra belastning på sql-serveren. Bemærk også, at denne type info er en perfekt kandidat til at cache.

Du kan lave gengivelsen som Rex nævnte. Alternativt kan du udvide en smule på denne implementering og få den til at understøtte hierarkiets grænseflader og bruge asp.net-kontroller.

Opdatering 1: For den gengivelsesvariation, du spurgte 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. Simple SQL Server-funktioner til at løse problemer i den virkelige verden

  2. Design af prisreglerdatabase til hotelreservationssystem

  3. Sådan får du to_number til at ignorere ikke-numeriske værdier

  4. MySQL CASE for at opdatere flere kolonner