2017-05-02 5 views
0

Ich versuche, eine Liste mit meinen Kategorien Daten zu füllen. Meine Kategorien haben Kaskadenformat. Sie sind rekursiv in meiner Datenbank formatiert. Hier ist mein Modellobjekt.asp.net mvc C# Auflistung Kategorien rekursiv

public class CategoriesDTO 
{ 
    public int Id { get; set; } 
    public int Level { get; set; } 
    public string Name { get; set; } 
    public List<CategoriesDTO> Subs { get; set; } 
} 

Also, in meinem Business-Schicht, ich versuche, diese Methode wie folgt zu nennen:

DAO.Categories(0); 

es mit „Stufe == 0“ Zustand startet und dann wird es weitergehen .. aber ich konnte die Datenzugriffsschicht nicht verwalten. Ich versuchte dies:

public List<CategoriesDTO> Categories(int PrmLevel) 
{ 
    List<CategoriesDTO> DTO = new List<CategoriesDTO>(); 
    //DB is my dbcontext. 
    DTO = DB.Categories.Select(x => new CategoriesDTO() 
    { 
     Id = x.Id, 
     Level = x.Level, 
     Name = x.Name 
     }).Where(y => y.Level == PrmLevel).ToList(); 
     foreach (var item in DTO) 
     { 
      //im stucked 
     } 
     return DTO; 
    } 
} 
+0

Werfen Sie einen Blick auf (http://stackoverflow.com/a/5422945/2920197) –

Antwort

0
public List<CategoriesDTO> Categories(int PrmLevel) 
{ 
    List<CategoriesDTO> DTO = new List<CategoriesDTO>(); 
    //DB is my dbcontext. 
    DTO = DB.Categories.Select(x => new CategoriesDTO() 
    { 
     Id = x.Id, 
     Level = x.Level, 
     Name = x.Name 
     }).Where(y => y.Level == PrmLevel).ToList(); 
     foreach (var item in DTO) 
     { 
      int CountSub = 0; 
      CountSub = DB.Categories.Where(x => x.Level == item.Id).ToList().Count(); 
      if (CountSub!=0) 
      { 
       item.Subs = Categories(item.Id).ToList(); 
      } 
     } 
     return DTO; 
    } 
} 
0
public List<CategoriesDTO> Categories(int PrmLevel) 
{ 
    List<CategoriesDTO> DTO = new List<CategoriesDTO>(); 
    //DB is my dbcontext. 
    DTO = DB.Categories.Select(x => new CategoriesDTO() 
    { 
     Id = x.Id, 
     Level = x.Level, 
     Name = x.Name 
     }).Where(y => y.Level == PrmLevel).ToList(); 
     foreach (var item in DTO) 
     { 
      item.Subs = ((PrmLevel + 1) <= MaxLevel) ? Categories(PrmLevel + 1) : null; 
     } 
     return DTO; 
    } 
} 
+0

hallo [Wie kann ich rekursiv verschachtelte Einheiten mit LINQ to Entity wählen] ty, übrigens, was meinst du mit "MaxLevel"? – ysrtymz

+0

In meinem Kontext, wenn Level 0 ist, ist es eine Hauptebene. http://imgur.com/a/CRqUX – ysrtymz

+0

@ysrtymz Nun, ich weiß nicht, wie Ihre Daten aussehen, also habe ich nur raten, aber ich hoffe, es würde Sie in die richtige Richtung zeigen ... Wie ermitteln Sie, welche Datensätze sollen in die Subs List gehen? Sie müssen Beispieldaten und erwartete Ergebnisse veröffentlichen, wenn Sie eine vernünftige Antwort wünschen ... Sie können einen Blick auf diesen ausgezeichneten Artikel werfen, um einige Hinweise zu erhalten: https://www.simple-talk.com/sql/performance/the -performance-of-traversing-a-sql-Hierarchie / – Milney