Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kembalikan daftar tidak berurutan dari data sql hierarkis

Menggunakan linq2sql Anda dapat melakukan:

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

Dengan asumsi Anda mendefinisikan properti Pages di PageInfo seperti:

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

Pemrosesan untuk mendapatkannya pada hierarki terjadi di sisi aplikasi web, yang menghindari beban tambahan pada server sql. Perhatikan juga bahwa jenis info ini adalah kandidat yang sempurna untuk disimpan di cache.

Anda dapat melakukan render seperti yang disebutkan Rex. Atau Anda dapat sedikit memperluas implementasi ini dan membuatnya mendukung antarmuka hierarki dan menggunakan kontrol asp.net.

Pembaruan 1: Untuk variasi rendering yang Anda tanyakan pada komentar, Anda dapat:

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. Gabungkan dua tabel menjadi satu

  2. Baca beberapa tabel dengan relasi dengan t-sql ke dalam DataSet

  3. Tentukan apakah Parameter SP memiliki Nilai Default di T-SQL

  4. Bagaimana saya bisa memasukkan nilai nol dalam MIN atau MAX?

  5. Menggunakan PIVOT dan BERGABUNG bersama