C# EF使用skip and take-on存储过程

C# EF使用skip and take-on存储过程,c#,sql,entity-framework,stored-procedures,C#,Sql,Entity Framework,Stored Procedures,调用存储过程时,Skip()和Take()如何在实体框架中工作?我无法访问sql profiler进行检查,但我希望确保优化服务器之间发送的数据量 假设我有以下代码,其中mystoredprocesdure返回1000多行 List<MyComplex_Result> myComplexList = db.MyStoredProcedure() .Skip(50) .Take(10); List myComplexList=db.mystoredprocesdure

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

假设我有以下代码,其中
mystoredprocesdure
返回1000多行

List<MyComplex_Result> myComplexList = db.MyStoredProcedure()
    .Skip(50)
    .Take(10);
List myComplexList=db.mystoredprocesdure()
.Skip(50)
.采取(10);

是否需要(10)
确保这些行中只有10行从数据库服务器发送到web服务器,还是会发送所有1000多行(尽管只有10行会发送到客户端)?

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

  • 我创建了一个视图,其中包含SP的结果。当然,它包含了所有没有过滤的记录。我使用该视图通过EF操作记录,其中Take和Skip始终适用
  • 我坚持使用SP。我所做的是将SP设计为允许接收Take和Skip Count。我使用SP_executesql创建了SP字符串

  • 因此,请记住@eocron下面的建议,您能在这里自我回答吗?恐怕调试只返回运行的SP的名称,而不是SQL,因此我仍然无法验证。无论使用何种技术,都不可能将窗口化合并到存储过程本身使用的查询中。这意味着,即使EF在存储过程的结果集上执行
    Skip
    /
    Take
    的方法比直接读取并丢弃
    Skip
    量,然后只读取
    Take
    量(我怀疑它会这样做)更聪明,存储过程仍然必须在内部检索所有行。您可能会发现,“优化发送的数据量”可能不是主要关注的问题。@Jeroenmoster,我相信您是对的。我必须回到这个问题上。我只是喜欢在EF中使用过滤和分页逻辑,而不是在SP中使用,并且由于查询的复杂性,我使用了SP。看起来这两个人不是真的在一起。我想我必须选择一个地方来处理所有问题。幸运的是,在服务器端包含分页并不困难,而且如果您的查询确实非常复杂,足以保证存储过程的正确性,那么您可能希望有机会对其进行优化。进行分页的“正确”方法实际上可以是。