Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zwróć nieuporządkowaną listę z hierarchicznych danych sql

Używając linq2sql możesz zrobić:

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

Zakładając, że zdefiniujesz właściwość Pages w PageInfo, taką jak:

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

Przetwarzanie w celu umieszczenia go w hierarchii odbywa się po stronie aplikacji internetowej, co pozwala uniknąć dodatkowego obciążenia serwera sql. Pamiętaj też, że ten rodzaj informacji jest idealnym kandydatem do buforowania.

Możesz zrobić render, jak wspomniał Rex. Alternatywnie można nieco rozszerzyć tę implementację i sprawić, by obsługiwała interfejsy hierarchii i używała kontrolek asp.net.

Aktualizacja 1: W przypadku odmiany renderowania, o którą prosiłeś w komentarzu, możesz:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ukrywanie instancji SQL Server w sieci

  2. Potrójne złącze wewnętrzne z ponad 10.000 rzędami i zastosowaniem stoisk do obliczeń boleni

  3. Czy mogę sprawdzić ograniczenia przed usunięciem w SQL Server?

  4. Który wiersz ma najwyższą wartość?

  5. SQL Jak zaktualizować SUMA kolumny nad grupą w tej samej tabeli