我想用实体框架查询一百万行,然后分页。我使用pagedlist.mvc库,因此首页上没有问题,因为我在代码中使用了.ToPagedList(pageNumber, pageSize)
,因此不必加载所有数据。
var allrows = db.works.Where(x => x.Status == 100).OrderByDescending(x => x.ID_Work).ToPagedList(pageNumber, pageSize);
但是当我添加过滤和分页操作时,首先应该加载所有行,然后对其进行过滤,然后使用.ToPagedList(pageNumber, pageSize)
。
var allrows = db.works.Where(x => x.Status == 100);
if(!String.IsNullOrEmpty(Code_Work))
{
allrows= allrows.Where(x => x.Code_Work.Contains(Code_Work));
ViewBag.CurrentCode_Work = Code_Work;
}
var pagedrows = allrows.OrderByDescending(x => x.ID_Work).ToPagedList(pageNumber, pageSize);
我该如何应对这一挑战。我认为这可能是问题,并且会降低性能。我不想加载所有行。
答案 0 :(得分:0)
您应该阅读IEnumerable and IQueryable
之间的区别您需要先使用IQueryable进行过滤查询
IQueryable<works> worksDetails = db.works.Where(x => x.Status == 100)
.OrderByDescending(x => x.ID_Work); // just creates the sql query to filter records
最后命中数据库以使用PagedList获取记录
var pagedrows = worksDetails.ToPagedList(pageNumber, pageSize);
// hits the database and executes the sql query to filter records
希望这会有所帮助。