Vb.net 如何优化此EF查询并实现分页?

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 =

我有大约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 = 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从视图/控制器传递到存储库?如何传递筛选器值?你也这么做,我让它工作了。跳绳和跳绳都很有效。现在,在获取寻呼机助手进行渲染时遇到了问题。