db.Database.SqlQuery<>()ToPagedList()。

时间:2015-07-13 05:59:29

标签: sql-server asp.net-mvc entity-framework pagedlist

当我使用时:

var result = db.votes.ToPagedList(pageNumber, pageSize);

结果从数据库中获取[pageSize]行,性能良好不发送到数据库“select * from table”

但是当我使用时:

  

var q2 = SELECT * FROM [dbname].[dbo].[v1] ";

     

var result = db.Database.SqlQuery<ISMS>(q2).ToPagedList(pageNumber, pageSize);

结果从内存中的数据库中捕获所有行,然后将其转换为pagedlist和 它非常慢,因为(向数据库发送查询是'select * from table')

我使用sqlServer profiler监视所有内容。

但是我想使用db.Database.SqlQuery有很多原因并且性能良好我做了什么?

我的测试:

1。var result = db.Database.SqlQuery<ISMS>(q2).AsQueryable().ToPagedList(pageNumber, pageSize);

它还将'select * from table'发送到数据库

2

var q = string.Format("SELECT *  FROM [dbname].[dbo].[{0}] " +
    "ORDER BY id " +
    "OFFSET  {1} ROWS " +
    "FETCH NEXT {2} ROWS ONLY ", tablename , 20 * (page - 1), 20);

但是当我使用上面的

时,我无法在视图中使用@ Html.PagedListPager

2 个答案:

答案 0 :(得分:1)

PagedList传递IQueryable时效果最佳,因为它会知道如何根据您的网页和页面大小生成需要发送到数据库的查询。

使用SqlQuery意味着您自己正在对数据库执行,然后将结果(已经在内存中)传递给PagedList

如果您对使用SqlQuery感兴趣,则需要自己处理分页。

答案 1 :(得分:0)

您应该只从数据库中选择所需的行。

例如:

`WITH Orderedtable AS (     选择一些东西     ROW_NUMBER()OVER(按某事订购)AS&#39; RowNumber&#39;     从表 )

SELECT * 从有序的 RowNumber BETWEEN 1000和2000`

其中1000是起始记录计数,2000是结束记录计数。