我有3个型号(缩短):
课程模式:
public int CourseID { get; set; }
public string Meta { get; set; }
public string Title { get; set; }
public string titleabbrev { get; set; }
public virtual ICollection<course_section> course_sections { get; set; }
课程部分模型:
[Key]
public int SectionID { get; set; }
[ForeignKey("Course_page")]
public int CourseID { get; set; }
public string Title { get; set; }
public string Colour_class { get; set; }
public int Order { get; set; }
public virtual Course_page Course_page { get; set; }
public virtual ICollection<course_subsection> course_subsections { get; set; }
课程分段模型:
[Key]
public int SubSectionID { get; set; }
[ForeignKey("course_section")]
public int SectionID { get; set; }
public string Title { get; set; }
public string Icon_class { get; set; }
public string Colour_class { get; set; }
public string Link { get; set; }
public int Order { get; set; }
public string Titleabbrev { get; set; }
public string Pagecontent { get; set; }
public virtual course_section course_section { get; set; }
它们组合在viewmodel中:
public class CourseViewModel
{
public IEnumerable<Course_page> Course_page { get; set; }
public IEnumerable<course_section> Course_section { get; set; }
public IEnumerable<course_subsection> Course_subsection { get; set; }
}
在我看来,我有3个foreach循环,旨在按顺序在页面上打印部分和相关小节。
在我的视图控制器中,我有以下内容:
public ActionResult Course_page(string courseabbrev)
{
var viewModel = new CourseViewModel();
viewModel.Course_page = db.Course_page
.Where(i => i.titleabbrev == courseabbrev)
.Include(i => i.course_sections.Select(c => c.course_subsections));
viewModel.Course_section = viewModel.Course_page.Where(i => i.titleabbrev == courseabbrev)
.Single().course_sections
.OrderBy(i => i.Order);
//viewModel.Course_subsection = db.course_subsection.ToList()
// .OrderBy(i => i.Order);
viewModel.Course_subsection = viewModel.Course_section.First().course_subsections;
return View(viewModel);
}
我试图发送到视图,只是加载页面时选择的课程的部分和子部分。目前,我可以通过使用上面注释掉的行来显示我想要的页面:
viewModel.Course_subsection = db.course_subsection.ToList()
.OrderBy(i => i.Order);
然后在我看来,我在第3个foreach循环中使用if语句来匹配viewModel.Course_section中的sectionID和viewModel.Course_subsection中的sectionID,以便它只打印出该部分的相关子部分。
这可行但似乎有点矫枉过正,因为我正在向页面发送所有子部分的列表。
控制器中可以看到的另一种选择是:
viewModel.Course_subsection = viewModel.Course_section.First().course_subsections;
这只会发回第一组course_subsections,因为我当然使用的是First()。
我的问题是将此数据发送到视图的最佳方法是什么?有没有办法只发送我需要的小节?
由于
答案 0 :(得分:1)
viewModel.Course_subsection = viewModel.Course_section
.SelectMany(c => c.course_subsections);