实体框架Raw SQL IQueryable

时间:2016-05-31 05:19:39

标签: sql-server entity-framework

在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);

我们正在考虑重新创建IPagedListIQueryable执行的操作,调用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是基于我们所在页面的值和总计数。

你认为这是一个好方法吗?还有另一种方法吗?

提前致谢

0 个答案:

没有答案