0

簡単にするために、私には3つのエンティティ(1対多、左から右)があります。

コース->モジュール->チャプター

コースには複数のモジュールを含めることができ、モジュールには複数のチャプターを含めることができます。

私がコントローラーに持っているのはこれだけです:

Course course = db.Courses.Find(id);
return View(course);

インクルードを使用しようとしましたが、評価されないようです(これは機能しないようですCourse course = db.Courses.Include("Modules").Find(id);:)

だから私はそれをさせます。私の見解では、私はこのネストされたリストを持っています:

<ul>
    @foreach (var item in Model.Modules)
    {
    <li>@module.Title
        <ul>
        @foreach (var item in module.Chapters)
        {
        <li>@chapter.Title</li>
        }
        </ul>
    </li>
    }
</ul>

これは自動的に機能しますか?

最後に、子エンティティを配置できるように、SortOrder列を適用しました。これはクエリで実行する必要があることはわかっていますが、どうすればこれを実行できますか?

ありがとう!情報やアドバイスをいただければ幸いです。

アップデート

コースクラス

public partial class Course
{
    public Course()
    {
        this.Modules = new HashSet<Module>();
        this.Assets = new HashSet<Asset>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Author { get; set; }
    public System.DateTime CreateDate { get; set; }
    public bool IsDeleted { get; set; }
    public int IndustryId { get; set; }

    public virtual ICollection<Module> Modules { get; set; }
    public virtual ICollection<Asset> Assets { get; set; }
    public virtual Industry Industry { get; set; }
}

モジュールクラス

namespace RocketLabs.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Module
    {
        public Module()
        {
            this.Chapters = new HashSet<Chapter>();
            this.Assets = new HashSet<Asset>();
        }

        public int Id { get; set; }
        public string Title { get; set; }
        public System.DateTime CreateDate { get; set; }
        public int CourseId { get; set; }
        public bool IsDeleted { get; set; }
        public short SortOrder { get; set; }

        public virtual Course Course { get; set; }
        public virtual ICollection<Chapter> Chapters { get; set; }
        public virtual ICollection<Asset> Assets { get; set; }
        public virtual Exam Exam { get; set; }
    }
}

チャプタークラス

namespace RocketLabs.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Chapter
    {
        public Chapter()
        {
            this.Assets = new HashSet<Asset>();
        }

        public int Id { get; set; }
        public string Title { get; set; }
        public int ModuleId { get; set; }
        public string Notes { get; set; }
        public short SortOrder { get; set; }
        public System.DateTime CreateDate { get; set; }
        public bool IsDeleted { get; set; }

        public virtual Module Module { get; set; }
        public virtual ICollection<Asset> Assets { get; set; }
    }
}
4

1 に答える 1

2

あなたはこれを行うことができます:

var course = db.Courses
               .Include(i => i.Modules.Select(s => s.Chapter))
               .Single(s=>s.Id == id);
return View(course);

そしてあなたのループ:

<ul>
    @foreach (var module in Model.Modules)
    {
        <li>@module.Title
            <ul>
                @foreach (var chapter in module.Chapters)
                {
                    <li>@chapter.Title</li>
                }
            </ul>
        </li>
     }
</ul>

並べ替えに関しては、クエリに.OrderBy()を含めることができますが、並べ替える子エンティティとフィールドを詳しく説明する必要があります。

于 2013-03-09T07:07:52.887 に答える