Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在实体框架中使用ToList或AsQueryable调用过程_C#_Sql_Sql Server_Entity Framework - Fatal编程技术网

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中“临时”创建查询