toPagedList()顺序与LINQ order by子句不同

时间:2011-12-26 20:03:50

标签: linq asp.net-mvc-3 sql-order-by pagedlist

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

我希望用户首先看到最后一个条目,类似于博客评论的订购方式。为此,我在LINQ语句中添加了“orderby descending”子句:

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()之前是正确排序的。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

你可以尝试:

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

它不在我的头顶,所以如果它不能完美地工作我很抱歉...

- 哇,刚注意到这一天的日期...我需要停止搜索未答复的页面而不按日期排序!