簡體   English   中英

根據子類的屬性訂購linq列表

[英]Ordering a linq list based on a property of a child class

我有以下課程:

public class CourseSection
{
    [Key]
    public int CourseSectionID { get; set; }

    public int CourseID { get; set; }

    public string Title { get; set; }

    public virtual ICollection<SectionContent> SectionContents { get; set; }
}

子類SectionContent如下所示:

public class SectionContent
{
    [Key, Column(Order = 0)]
    public int CourseSectionID { get; set; }
    [ForeignKey("CourseSectionID")]
    public virtual CourseSection CourseSection { get; set; }

    [Key, Column(Order = 1)]
    public int ContentID { get; set; }
    [ForeignKey("ContentID ")]
    public virtual Content Content { get; set; }

    public int ContentOrder { get; set; }
}

我希望能夠根據ContentOrder字段對sectioncontent列表進行排序,我的sectioncontent表中包含以下數據:

CourseSectionID         ContentID         ContentOrder
1                       212               1
1                       208               2
1                       214               3
1                       210               4

但是,當在視圖中顯示此內容時,我無法根據ContentOrder屬性對節內容進行排序。 它基於ContentID進行顯示,因此顯示為208,210,212,214。 如何根據此屬性訂購SectionContents? 這是我的剃刀視圖代碼:

foreach (var sectionItem in Model.CourseSections)
{                     
  <li>
    <h5 class="accordion-title">@sectionItem.Title<span class="accordion-icon"></span></h5>
      <div class="accordion-content">
        <ul>                                    
        @foreach (var subSectionItem in sectionItem.SectionContents)
        {
          <li><a href="#" id="menuItem @subSectionItem.ContentID @sectionItem.CourseSectionID" onclick="SubItemMenu(id)">@subSectionItem.Content.Name</a></li> 
        }
        </ul>
      </div>
  </li>
}              

只需在您的foreach添加一個OrderBy()語句即可。

foreach (var sectionItem in Model.CourseSections)
{                     
  <li>
    <h5 class="accordion-title">@sectionItem.Title<span class="accordion-icon"></span></h5>
      <div class="accordion-content">
        <ul>                                    
        @foreach (var subSectionItem in sectionItem.SectionContents.OrderBy(sc => sc.ContentOrder))
        {
          <li><a href="#" id="menuItem @subSectionItem.ContentID @sectionItem.CourseSectionID" onclick="SubItemMenu(id)">@subSectionItem.Content.Name</a></li> 
        }
        </ul>
      </div>
  </li>
}

另外,您也可以在首先獲取數據時執行OrderBy() ,然后假定數據在視圖中的順序正確-選擇是您自己的。

您正在尋找OrderBy擴展方法。

@foreach (var subSectionItem in sectionItem.SectionContents.OrderBy(item => item.ContentOrder))
{
      <li><a href="#" id="menuItem @subSectionItem.ContentID @sectionItem.CourseSectionID" onclick="SubItemMenu(id)">@subSectionItem.Content.Name</a></li> 
}

我想您有某種服務方法可以返回CourseSection模型。 在該方法中,設置已排序的模型屬性:

var myCourseModel = buildMyCourseSection();
myCourseModel.SectionContents = (from sc in myCourseModel.SectionContents 
    order by sc.ContentOrder
    select sc).ToArray();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM