C# 在实体框架中使用ToList或AsQueryable调用过程
我想知道,如果我用C# 在实体框架中使用ToList或AsQueryable调用过程,c#,sql,sql-server,entity-framework,C#,Sql,Sql Server,Entity Framework,我想知道,如果我用.ToList()或.AsQueryable()调用过程,在实体框架中是否也有相同的效果 看看这个: var query1 = DB.sp_GetConsultants().AsQueryable(); var query2 = DB.sp_GetConsultants().ToList(); 我知道,AsQueryable只是创建一个查询,然后ToList执行它,但是当 我查看了SQL Server Profiler,发现query1和query2都执行 下面是一个屏幕截图
.ToList()
或.AsQueryable()
调用过程,在实体框架中是否也有相同的效果
看看这个:
var query1 = DB.sp_GetConsultants().AsQueryable();
var query2 = DB.sp_GetConsultants().ToList();
我知道,AsQueryable
只是创建一个查询,然后ToList
执行它,但是当
我查看了SQL Server Profiler,发现query1和query2都执行
下面是一个屏幕截图来证明这一点:
但如果我直接在表中查询它而不调用存储过程,它看起来很好,只有ToList
执行查询,而不是AsQueryable
:
var query1 = DB.Consultants.AsQueryable();
var query2 = DB.Consultants.ToList();
存储过程不能用作“可查询的”,因为它已执行其语句,并且数据已“物化”。所以是的-如果调用存储过程,它将始终对SQL Server执行-使用
。AsQueryable()
是无意义的-执行存储过程时将查询服务器并检索数据。@marc\s我使用服务器端筛选,因为我使用了存储过程,所以在C#中构建where子句字符串时不需要使用seance。是吗?你能告诉我该怎么做吗?重点是:如果你使用存储过程,那么你就不能利用IQueryable
-简单明了的优点。如果这是您需要或想要的,那么您需要转储存储过程并在EFA中创建查询“ad-hoc”存储过程不能用作“queryable”,因为它已经执行了它的语句,并且数据是“物化的”。所以是的-如果调用存储过程,它将始终对SQL Server执行-使用。AsQueryable()
是无意义的-执行存储过程时将查询服务器并检索数据。@marc\s我使用服务器端筛选,因为我使用了存储过程,所以在C#中构建where子句字符串时不需要使用seance。是吗?你能告诉我该怎么做吗?重点是:如果你使用存储过程,那么你就不能利用IQueryable
-简单明了的优点。如果这是您需要或想要的,那么您需要转储存储过程,并在EF中“临时”创建查询