toPagedList()的顺序不同于LINQ顺序的条款

问题描述:

我有一个小应用程序,它向用户显示shortURL列表。我正在使用ASP.NET MVC3,实体框架和Oracle后端。我还在使用Troy Goode的PagedList库(https://github.com/TroyGoode/PagedListtoPagedList()的顺序不同于LINQ顺序的条款

我希望用户首先看到最后一个条目,这与博客评论的排序方式类似。要做到这一点,我添加了一个“排序依据降”条款的LINQ声明:

var links = from l in db.LINKS 
      orderby l.ID descending 
      select l; 

在调试“链接”对象的要求是有序(按降序排列,按主键“ID”)。

现在我想的连结清单通过使用.toPagedList()方法的观点:

int pageSize = 3; 
int pageNumber = (page ?? 1); // "page" comes from the request, if null set to 1 
return View(links.ToPagedList(pageNumber, pageSize)); 

这个伟大的工程,如果我只有3条记录(请参阅“pageSize的”上图)。但是,当我添加第4条记录时,我会收到意想不到的行为。因为我将pageSize设置为3,所以添加第四条记录意味着将会有2页。 我期望的顺序是如下:

Page 1: 
    ID: 4 
    ID: 3 
    ID: 2 
Page 2: 
    ID: 1 

这是不是这样,实际发生的事情是这样的:

Page 1: 
    ID: 3 
    ID: 2 
    ID: 1 
Page 2: 
    ID: 4 

所以我的问题,你到底我做错这里错了吗?为什么PagedList不遵循LINQ语句中由“orderby l.ID descending”表达式定义的顺序?这对我来说是莫名其妙的,因为在调试器中很明显,在使用.toPagedLIst()之前,“链接”对象已被正确排序。

任何帮助,非常感谢!

+0

您是否使用Linq-to-Oracle? – 2012-01-11 14:56:00

+0

@GertArnold我使用linq-to-entity我想,因为我使用EF4.2提供程序。我必须承认我是这个东西的新手,所以我不确定两者的区别。我的想法是在Oracle ADO和EF之间,LINQ将在Oracle之上工作。 – 2012-01-17 20:40:18

+1

你有没有找到这个解决方案?我在这里遇到同样的问题,使用SQL数据库后端。 – 2013-04-17 15:12:12

你可以尝试:

return View(links.ToPagedList(pageNumber, pageSize, m => m.ID, true)); 

这是从我的头顶,所以我很抱歉,如果它不能很好地工作......

- 哇,只注意到日期在这一个...我需要停止拖曳未答复的页面,而不按日期排序!