2014-03-03 55 views
0

我有下面的類的屬性LINQ的列表:訂購基於一個子類

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

我希望能夠排序sectioncontent的基礎上,ContentOrder場,我有我的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> 
}    

回答

1

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> 
} 
+0

乾杯不錯的一個,我想這一點,但與subSectionItem.ContentOrder其中它不是承認,項目的伎倆再次感謝 – Jay

+1

@Jay只是爲了增加我的2美分 - 這無所謂你稱之爲'物品'。如果你願意,你可以稱它爲「PaddingtonBear12345」,但它仍然可以工作。它只是一個'SectionContent'項目的實例的變量名稱。這就是爲什麼,在我的回答中,我把它稱爲'sc'代表'SectionContent' – theyetiman

+0

我正在嘗試subSection我想是與其他變量的類只是可能 – Jay

2

只需添加一個OrderBy()語句將foreach ...

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(),當你取擺在首位的數據,再假設這一切都在正確的在你看來的順序 - 選擇是你的。

1

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

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

以前的答案幫助我只是沒有標記它,但感謝輸入:) – Jay