2017-05-02 4 views
0

J'essaie de remplir une liste avec mes données de catégories. Mes catégories ont un format en cascade. Ils sont formatés récursivement dans ma base de données. Voici mon objet modèle.asp.net mvc C# liste catégories récursivement

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

Ainsi, dans ma couche d'affaires, je suis en train d'appeler cette méthode comme ceci:

DAO.Categories(0); 

il va commencer avec l'état « Niveau == 0 » puis ça va continuer .. mais je n'ai pas pu gérer le Data Access Layer. J'ai essayé ceci:

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

Jetez un oeil à [Comment sélectionner les entités imbriquées récursif utilisant LINQ à l'entité] (http://stackoverflow.com/a/5422945/2920197) –

Répondre

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

salut ty, btw, que voulez-vous dire par "MaxLevel"? – ysrtymz

+0

Dans mon contexte, si Level est 0, c'est un niveau principal. http://imgur.com/a/CRqUX – ysrtymz

+0

@ysrtymz Eh bien, je ne sais pas à quoi ressemblent vos données, alors je ne faisais que deviner, mais j'espérais que cela vous dirigerait dans la bonne direction ... Comment déterminez-vous quels enregistrements sont censés aller dans la liste des sous-marins? Vous aurez besoin de publier des exemples de données et les résultats attendus si vous voulez une réponse sensée ... Vous pouvez jeter un oeil à cet excellent article pour obtenir quelques conseils: https://www.simple-talk.com/sql/performance/the -performance-de-traverser-une-sql-hierarchy / – Milney