在ASP.NET MVC项目中,我们在应用程序原始SQL的某些部分中使用,直接向SQL Server发送查询。我们这样做有很多原因,其中之一是因为我们需要在同一个查询中调用2个不同的数据库。
result = dbContext.Database.SqlQuery<ResultsListModel>(sqlQuery,params...)
这会返回IEnumerable
,因为无法返回IQueryable
,尽管.SqlQuery
允许调用.AsQueryable()
,但它并未真正返回IQueryable
{1}}。
这意味着每次调用查询时,数据库都会将所有记录检索到内存中,而不是性能良好。
之后我们致电IPagedList
分页结果
result.ToPagedList(searchModel.Page ?? 1, searchModel.PageSize ?? PageSize);
我们正在考虑重新创建IPagedList
对IQueryable
执行的操作,调用COUNT
结果,然后将所需结果从一个结果转移到另一个结果。
因此,我们会对COUNT
所有结果进行查询。
SELECT COUNT(*)
FROM "Rest of the query"
然后我们会使用相同的FROM
部分执行另一个查询,但这次检索列并从一个结果转到另一个结果只检索我们需要的那些。
SELECT *
FROM
(SELECT
"All the columns we need",
ROW_NUMBER() OVER (ORDER BY Id) as row
FROM
"Rest of the query") a
WHERE
row > X and row <= Y;
其中X和Y是基于我们所在页面的值和总计数。
你认为这是一个好方法吗?还有另一种方法吗?
提前致谢