sql >> Databáze >  >> RDS >> Sqlserver

Vrátí neuspořádaný seznam z hierarchických dat SQL

Pomocí linq2sql můžete udělat:

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

Za předpokladu, že definujete vlastnost Pages v PageInfo jako:

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

Zpracování, aby se to dostalo do hierarchie, se děje na straně webové aplikace, což zabraňuje dodatečnému zatížení serveru SQL. Všimněte si také, že tento typ informací je perfektním kandidátem na ukládání do mezipaměti.

Můžete provést render, jak zmínil Rex. Alternativně můžete tuto implementaci trochu rozšířit a zajistit, aby podporovala rozhraní hierarchie a používala ovládací prvky asp.net.

Aktualizace 1: Pro variantu vykreslení, na kterou jste se zeptali v komentáři, můžete:

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


  1. SQL Server 2008 – vypočítaný sloupec HashBytes

  2. Složené indexy MySQL a operátor BETWEEN

  3. Vkládání proměnných do SQL dotazu pro node-mysql

  4. Mysqlimport z potrubí