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) 你是对的,它对学生实际排序的方式
ViewBag.datesortParam
设置为“Date\u desc”,但sortOrder是否仍然为“Date”,因此实际上不会更改顺序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());
}