如何从LINq创建复杂的自定义对象

时间:2016-11-21 19:20:22

标签: c# entity-framework 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; }
}

我想从以下按顺序返回Category和IList的函数创建MenuModel。

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

我有类似下面的内容,但我不确定......

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

任何帮助都会很棒。我不想循环获取每个类别的文章。

2 个答案:

答案 0 :(得分:2)

也许这样的事情可以帮助你。

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

唯一的问题是,如果GetArticlesByCategory进行数据库搜索,则此代码不会是最优的;如果是这种情况,您应该根据您首先选择的类别分别查询所有文章。

答案 1 :(得分:1)

我假设您正在使用Entity Framework。 最好的方法是在sql server中创建文章和类别之间的关系,更改代表table的类以互相引用,并让你知道它的上下文。

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()

执行后,您的Category对象将包含文章列表。您可以在此处找到更多信息http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx