我正在尝试在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 .....)
任何帮助都会很棒。我不想循环获取每个类别的文章。
答案 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