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