C# 基于子类的属性对linq列表排序
我有以下课程:C# 基于子类的属性对linq列表排序,c#,linq,virtual,icollection,C#,Linq,Virtual,Icollection,我有以下课程: 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
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; }
}
我希望能够根据ContentOrder字段对sectioncontent列表进行排序,我的sectioncontent表中有以下数据:
CourseSectionID ContentID ContentOrder
1 212 1
1 208 2
1 214 3
1 210 4
但在视图中显示此内容时,我无法根据ContentOrder属性对节内容进行排序。它基于ContentID显示,因此显示为208210212214。如何基于此属性对SectionContents进行排序?这是我的razor视图代码:
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(Model.CourseSections中的var sectionItem)
{
@章节项目.标题
@foreach(sectionItem.SectionContents中的var subSectionItem)
{
}
}
扩展方法就是您要寻找的
@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>
}
@foreach(sectionItem.SectionContents.OrderBy(item=>item.ContentOrder)中的var subSectionItem)
{
}
扩展方法就是您要寻找的
@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>
}
@foreach(sectionItem.SectionContents.OrderBy(item=>item.ContentOrder)中的var subSectionItem)
{
}
只需在您的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>
}
foreach(Model.CourseSections中的var sectionItem)
{
@章节项目.标题
@foreach(sectionItem.SectionContents.OrderBy(sc=>sc.ContentOrder)中的var subSectionItem)
{
}
}
或者,当您首先获取数据时,您可以执行OrderBy()
,然后假设数据在您的视图中的顺序正确-选择权在您。只需在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>
}
foreach(Model.CourseSections中的var sectionItem)
{
@章节项目.标题
@foreach(sectionItem.SectionContents.OrderBy(sc=>sc.ContentOrder)中的var subSectionItem)
{
}
}
或者,当您首先获取数据时,您可以执行
OrderBy()
,然后假设数据在您的视图中的顺序正确-选择权在您。我想象您有某种服务方法返回您的CourseSection模型。在该方法中,设置“排序模型”属性:
var myCourseModel = buildMyCourseSection();
myCourseModel.SectionContents = (from sc in myCourseModel.SectionContents
order by sc.ContentOrder
select sc).ToArray();
我想你有某种服务方法返回你的CourseSection模型。在该方法中,设置“排序模型”属性:
var myCourseModel = buildMyCourseSection();
myCourseModel.SectionContents = (from sc in myCourseModel.SectionContents
order by sc.ContentOrder
select sc).ToArray();
干杯很好,我尝试过这个,但是使用subSectionItem.ContentOrder它没有识别,item成功了谢谢again@Jay只需再加上我的2美分,你怎么称呼
项目
并不重要。如果您愿意,可以将其称为PaddingtonBear12345
,但它仍然可以工作。它只是一个SectionContent
项实例的变量名。这就是为什么,在我的回答中,我把它称为sc
代表SectionContent
我在尝试subSection,我想它是一个带有其他变量的类,可能是因为cheers很好,我在尝试这个,但它没有识别subSectionItem.ContentOrder,我成功了,谢谢again@Jay只需再加上我的2美分,你怎么称呼项目
并不重要。如果您愿意,可以将其称为PaddingtonBear12345
,但它仍然可以工作。它只是一个SectionContent
项实例的变量名。这就是为什么,在我的回答中,我称它为sc
代表SectionContent
我在尝试小节,我猜它是与其他变量一起分类的,只是可能上一个答案帮助了我,只是没有标记它,但感谢您的输入:)上一个答案帮助了我,只是没有标记它,但感谢您的输入:)