Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于子类的属性对linq列表排序_C#_Linq_Virtual_Icollection - Fatal编程技术网

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
    我在尝试小节,我猜它是与其他变量一起分类的,只是可能上一个答案帮助了我,只是没有标记它,但感谢您的输入:)上一个答案帮助了我,只是没有标记它,但感谢您的输入:)