EF使用skip并采用存储过程

The*_*son 5 c# sql stored-procedures entity-framework

如何Skip()Take()实体框架中工作调用存储过程的时候?我无法访问sql profiler进行检查,但我想确保优化服务器之间发送的数据量.

假设我有以下代码,其中MyStoredProcedure返回1000+行.

List<MyComplex_Result> myComplexList = db.MyStoredProcedure()
    .Skip(50)
    .Take(10);
Run Code Online (Sandbox Code Playgroud)

Take(10)确保只有那些行的10从数据库服务器发送到Web服务器,或将全部1000+行发送(虽然只有10会被发送到客户端)?

小智 2

我以前也遇到过这样的要求。最初,我的选择是使用存储过程,但是当我意识到数据可能有数千个时,使用 SP 不再适用。为此,我做了两件事:

  1. 我创建了一个视图,SP 的结果就在那里。当然,这包含尚未过滤的所有记录。我使用该视图通过 EF 操作记录,其中 Take 和 Skip 已经适用。
  2. 我坚持SP。我所做的就是设计 SP 以允许接收 Take 和 Skip Count。我使用 sp_executesql 将 SP 创建为字符串。