在MVC中使用自定义逻辑对大量数据进行分页
本文关键字:数据 分页 MVC 自定义 | 更新日期: 2023-09-27 18:04:01
我想在MVC中实现对大量数据(DB有2 - 300万条记录)的分页,搜索,排序。在MVC中使用默认分页选项(使用PagedList.Mvc
, @Html.PagedListPager
)时,所有记录都为DB &页面上只显示100条记录。那很费时间& &;使用更多内存
我如何在MVC中实现自定义逻辑,每页只检索确切的100条记录?目前我正在尝试两种方法(使用EF和SP)。
我已经使用EF &SP并实现默认分页。但这两种方法都从数据库中检索所有记录;然后在客户端应用分页。那太浪费时间了。
public ActionResult Index(int? page) {
return View(db.TestUploadData2.ToList().ToPagedList(page ?? 1, 100));
}
有什么建议吗?
你遇到的问题是,你把所有的东西从数据库拉到c#内存和然后只得到你想要显示的。
db.TestUploadData2.ToList()
.ToList()
是从数据库中获取的,所以你想把你的资格放在它之前。
你应该这样做:
public IEnumerable<TestUploadData2> GetPagedData(string prop1SearchValue,
string prop2SearchValue,
int pageNum = 1,
int pageSize = 20)
{
var data = db.TestUploadData2;
// No idea what your properties are, so I'll just wing with strings.
if (!string.IsNullOrWhitespace(prop1SearchValue))
{
data = data.Where(d => d.Prop1 == prop1SearchValue);
}
// Did it like this so you can see how to conditionally filter the query
if (!string.IsNullOrWhitespace(prop2SearchValue))
{
data = data.Where(d => d.Prop2 == prop2SearchValue);
}
// If it is the first page, then 0 * pageSize,
// second page, skip 1 * pageSize, etc.
return data.Skip((pageNum - 1) * pageSize)
// Take only what is being asked for.
.Take(pageSize)
// NOW pull it from the database.
.ToList();
}
以下是使用PagedList.Mvc
的正确方法。
public ViewResult Index(int? page)
{
int pageSize = 100;
int pageNumber = (page ?? 1);
return View(db.TestUploadData2.ToPagedList(pageNumber, pageSize));
}
你可以阅读更多关于分页与实体框架文章。