2016-11-21 3 views
0

Ich versuche, eine Liste von benutzerdefinierten Objekten in LINQ zu erstellen, und ich bin mir nicht sicher, wie es geht. Hier ist meine Klassen ...Erstellen von komplexen benutzerdefinierten Objekt von LINq

public class MenuModel 
{ 
    public IList<MenuCategoriesWithArticles> Menu { get; set; } 
} 

public class MenuCategoriesWithArticles 
{ 
    public Category Category { get; set; } 
    public IList<Article> Articles { get; set; } 
} 

und ich möchte MenuModel aus den folgenden Funktionen erstellen, die Kategorie und IList, um zurückzukehren.

businessCategory.GetAllCategories(); 
businessArticle.GetArticlesByCategory(int categoryId); 

Ich habe so etwas wie unten, aber ich bin mir nicht sicher ...

businessCategory.GetAllCategories().Select(x=> new .....) 

jede Hilfe wäre toll. Ich möchte keine Schleife machen, um die Artikel jeder Kategorie zu erhalten.

+1

"Ich möchte nicht Schleife, um die Artikel jeder Kategorie zu erhalten." Ich sehe nicht, wie Sie es sonst tun würden, da 'GetArticlesByCategory()' eine 'categoryId' erfordert. –

Antwort

1

Ich nehme an, Sie verwenden Entity Framework. Der beste Ansatz für Sie besteht darin, eine Beziehung zwischen Artikeln und Kategorien in Ihrem SQL-Server zu erstellen, Ihre Klassen zu ändern, die die Tabelle repräsentieren, um Verweise darauf zu haben, und Ihren Kontext darüber zu informieren.

public class Category 
{ 
    public int CategoryId { get; set; } 

    public IList<Article> Articles { get; set; } 
} 

public class Article 
{ 
    public int ArticleId { get; set; } 
    public Category Category { get; set; } 
} 

protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Article>().HasOne(article => article.Category) 
      .WithMany(category=> category.Articles); 
    } 

Wenn Sie diese Änderungen haben, können Sie Ihre Kategorien auf diese Weise erhalten.

await dbContext.Category.Include("Articles").ToListAsync() 

Nach der Ausführung wird Ihre Kategorie Objektliste der Artikel haben. Sie können weitere Informationen hier finden http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx

+0

Ich kann nicht OnModelCreating implementieren, es sagt "keine geeignete Methode gefunden, um zu übersteuern" –

+0

Das ist seltsam. Welche Version von Entity Framework verwenden Sie? Ich benutze EF Core und –

+0

Ich benutze EF Core und meine Kontext-Klasse ist wie folgt definiert: öffentliche Teilklasse H2OContext: DbContext. Wenn ich zur DbContext-Definition navigiere, hat sie die virtuelle Methode OnModelCreating. –

2

Vielleicht könnte so etwas Ihnen helfen.

businessCategory.GetAllCategories().Select(x=> new MenuCategoriesWithArticles{ 
    Category = x, 
    Articles = businessArticle.GetArticlesByCategory(x.categoryId).ToList(); 
}); 

Das einzige, was ist, wenn GetArticlesByCategory tut eine Datenbanksuche dieser Code nicht optimal sein wird; Wenn dies der Fall ist, sollten Sie alle Artikel separat abfragen, abhängig von den Kategorien, die Sie zuerst auswählen.

Verwandte Themen