2016-07-08 2 views
0

У меня есть 3 модели (укороченный):Извлечение точных данных из Viewmodel для отправки на просмотр с тремя моделями?

модель курса:

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

Они объединены в вид модели:

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

На мой взгляд, у меня есть три петли 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-м цикле Еогеасп для соответствовать sectionID в viewModel.Course_section с sectionID в viewModel.Course_subsection, чтобы он печатал только соответствующие подразделы для этого раздела.

Это работает, но кажется излишним, поскольку я отправляю список всех подразделов на страницу.

Другая альтернатива, которую можно увидеть в контроллере:

viewModel.Course_subsection = viewModel.Course_section.First().course_subsections; 

Это будет только отправить обратно первую группу course_subsections, потому что, конечно, я использую в первую очередь().

Мой вопрос: каков наилучший способ отправки этих данных на представление? Есть ли способ, по которому я могу отправлять только те подразделы, которые мне нужны?

Благодаря

ответ

1

Использование SelectMany

viewModel.Course_subsection = viewModel.Course_section 
             .SelectMany(c => c.course_subsections); 
+0

Это замечательно, именно ответ мне было нужно, спасибо. – Rob

+0

отметьте это как правильный ответ – lstern

Смежные вопросы