C# 下面的EF MVC 5代码是如何进行排序的?

C# 下面的EF MVC 5代码是如何进行排序的?,c#,asp.net,.net,asp.net-mvc,linq,C#,Asp.net,.net,Asp.net Mvc,Linq,三元运算符只返回一个基于条件的结果,它们不会更改排序器,对吗 如果sortOrder为“Date”,那么代码会将ViewBag.datesortParam设置为“Date\u desc”,但sortOrder是否仍然为“Date”,因此实际上不会更改顺序 我不知道这段代码怎么可能正常工作,但它确实正常工作。1)三元运算符只是设置了一个ViewBag值,是的。它们不会更改sortOrder变量的内容。事实恰恰相反——它们根据sortOrder的值来决定做什么 2) 你是对的,它对学生实际排序的方式

  • 三元运算符只返回一个基于条件的结果,它们不会更改排序器,对吗
  • 如果sortOrder为“Date”,那么代码会将
    ViewBag.datesortParam
    设置为“Date\u desc”,但sortOrder是否仍然为“Date”,因此实际上不会更改顺序
  • 我不知道这段代码怎么可能正常工作,但它确实正常工作。

    1)三元运算符只是设置了一个ViewBag值,是的。它们不会更改
    sortOrder
    变量的内容。事实恰恰相反——它们根据
    sortOrder
    的值来决定做什么

    2) 你是对的,它对
    学生
    实际排序的方式没有任何影响,这是由
    开关
    语句决定的


    ViewBag参数值设置为与预期相反的值的原因是,在视图中,它们用于构建超链接,单击超链接时,将导致数据按与当前相反的方式排序。e、 g.如果当前排序为“日期”(日期升序),则它将构造一个链接,如果单击该链接,将向服务器传回重新排序和返回数据的指令,但这次将改为按“日期降序”(日期降序)排序。因此,如果您考虑到这些值以后的用途,这是有意义的。

    是的,如果您查看引用的示例中的视图,它们只是提供当前显示的另一种排序的显示-查看视图代码。@PeterSmith我确实只是看了一下(虽然这段代码确实应该是问题的一部分,因为上下文很重要!)并更新了我的答案,以反映您指出的相同结论。1.没错,如果SortOrder等于date,则三元返回“date_desc”,否则默认为“date”。2.从我在“date_desc”中看到的情况来看它的排序按注册日期递减,如果是“日期”,它的排序按注册日期递增。除非视图包对视图本身进行排序?
    public ActionResult Index(string sortOrder){
    
    
       ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
       ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date";
       var students = from s in db.Students
                      select s;
       switch (sortOrder)
       {
          case "name_desc":
             students = students.OrderByDescending(s => s.LastName);
             break;
          case "Date":
             students = students.OrderBy(s => s.EnrollmentDate);
             break;
          case "date_desc":
             students = students.OrderByDescending(s => s.EnrollmentDate);
             break;
          default:
             students = students.OrderBy(s => s.LastName);
             break;
       }
       return View(students.ToList());
    }