[英]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.