Vb.net 如何优化此EF查询并实现分页?
我有大约14000行数据。如果使用下面的EF查询,加载时间会很长,因为我怀疑它正在加载所有14000行,只有在这之后才完成任何额外的筛选。这是我的存储库中的Select方法Vb.net 如何优化此EF查询并实现分页?,vb.net,paging,asp.net-mvc-5.1,entity-framework-6.1,Vb.net,Paging,Asp.net Mvc 5.1,Entity Framework 6.1,我有大约14000行数据。如果使用下面的EF查询,加载时间会很长,因为我怀疑它正在加载所有14000行,只有在这之后才完成任何额外的筛选。这是我的存储库中的Select方法 Public Function SelectAll() As IEnumerable(Of be_Posts) Implements IPostRepository.SelectAll Dim posts As IEnumerable(Of be_Posts) Using db As Ctx =
Public Function SelectAll() As IEnumerable(Of be_Posts) Implements IPostRepository.SelectAll
Dim posts As IEnumerable(Of be_Posts)
Using db As Ctx = New Ctx
posts = db.be_Posts.OrderByDescending(Function(x) x.DateCreated).ToList
Return posts
End Using
和控制器:
Function Index(page As Integer?) As ActionResult
Dim PageSize = System.Web.Configuration.WebConfigurationManager.AppSettings("PageSize")
Dim pageNumber As Integer = If(page, 1)
Dim posts = _repo.SelectAll()
Return View(posts.ToPagedList(pageNumber, PageSize))
End Function
视图中的帮助程序:
@Html.PagedListPager((Model), Function(page) Url.Action("Index", New With { _
.page = page _
}), PagedListRenderOptions.ClassicPlusFirstAndLast)
现在,如果添加一个
take
子句,例如.take(500)
,那么速度会大大加快。如何使此查询更快并仍能在所有记录中运行?我还使用Troy Goode的PagedList扩展来获得分页功能。只要我只有几百张唱片,一切都很好。那怎么办呢?我能找到的使用Troy库的大多数(如果不是所有的话)分页示例都直接涉及控制器中的所有代码 调用ToList
执行查询,正如您所说,它将获取所有记录。使用Skip
和Take
完成分页,例如
Dim page = list.Skip(pageSize * (pageNumber - 1)).Take(pageSize)
源列表可以是表本身,也可以是
Where
或OrderBy
调用的结果或其他任何内容。只需确保ToList
或最好是ToArray
是最后一个调用即可。是否创建了某种日期索引,以便SQL Server能够高效地查找第一个X记录?您应该返回iQueryTable我如何将pageSize和PageNumber从视图/控制器传递到存储库?如何传递筛选器值?你也这么做,我让它工作了。跳绳和跳绳都很有效。现在,在获取寻呼机助手进行渲染时遇到了问题。