2016-11-21 53 views
0

我想在LINQ中創建自定義對象的列表,我不知道如何去做。這裏是我的課...如何從LINq創建複雜的自定義對象

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

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

我想創建MenuModel從下面的函數返回Category和IList的順序。

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

我有類似以下,但我不知道......

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

任何幫助將是巨大的。我不想循環獲取每個類別的文章。

+1

「我不想循環獲取每個類別的文章。」我不明白你會怎麼做,因爲GetArticlesByCategory()需要一個'categoryId'。 –

回答

1

我假設你使用的是實體框架。 對於你來說,最好的方法是在你的sql服務器中創建文章和類別之間的關係,改變表示相互引用的類,讓你的上下文知道它。

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

當你有這個變化,你可以這樣得到你的類別。

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

執行後,您的類別對象將包含文章列表。您可以在這裏找到更多信息http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx

+0

我不能實現OnModelCreating,它說'找不到合適的方法來覆蓋' –

+0

這很奇怪。你使用的是什麼版本的實體框架?我使用EF Core和 –

+0

我使用EF核心,我的上下文類定義如下:public partial class H2OContext:DbContext。如果我導航到DbContext定義,它具有虛擬方法OnModelCreating。 –

2

也許這樣的事情可以幫助你。

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

唯一的一點是,如果GetArticlesByCategory做了數據庫搜索該代碼將不是最佳的;如果是這種情況,則應根據您首先選擇的類別分別查詢所有文章。