我想做类似分页的事情。假设我们的数据库中有100个联系人。当我的索引页面第一次加载时,它将从数据库加载20个联系人项目。页面末尾有一个“更多”按钮。当用户单击该按钮时,我想从数据库中加载接下来的20个项目,并将其显示在已显示的联系人下方。

 public ActionResult Index(int no)
 {
     var contacts = GetContactFromDB(no) //no is used to know what is the current page number
 }

 public IList<Contact> GetContactFromDB(int pagenumber)
 {
      // here  write the query to get next 20 items
  }


我想我忘了告诉我的一件事是,我不想丢失前20个联系人。我的意思是,当用户单击该按钮时,将使用AJAX请求从数据库中获取接下来的20个联系人,并追加这些新联系人。前一个之后有20个联系人...

最佳答案

只需结合使用Linq的SkipTake扩展方法:

return Contacts.Skip(PageSize * pageNumber).Take(PageSize).ToList();


注意:这没有考虑您如何获得Contacts。但是我想您已经知道:)另外,它假设pageNumber是基于0的。
如果使用的是Linq-To-SQL或Linq-To-Entities,则对SkipTake的调用也将转换为最终数据库查询的一部分。

08-26 20:04
查看更多