Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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# “是怎么回事?”;返回(从上下文中的tbl。[tablename]选择tbl)";如果调用方法则执行,然后对结果执行.Where()?_C#_Sql Server_Linq_Entity Framework - Fatal编程技术网

C# “是怎么回事?”;返回(从上下文中的tbl。[tablename]选择tbl)";如果调用方法则执行,然后对结果执行.Where()?

C# “是怎么回事?”;返回(从上下文中的tbl。[tablename]选择tbl)";如果调用方法则执行,然后对结果执行.Where()?,c#,sql-server,linq,entity-framework,C#,Sql Server,Linq,Entity Framework,方法从上下文中的x返回查询的IQueryable结果。y选择x查询 然后调用方法调用该结果集上的。其中(a=>…) 整个x是否将在IQueryable中返回,然后进行过滤?或者LINQ会延迟地加载它,并且只有在迭代resultset之后,才会执行实际的SQL查询(使用where条件) 这是针对MSSQL数据库使用EntityFramework LINQ to Entities。如果该方法返回一个IQueryable,则返回的是查询,而不是查询结果。因此,调用Where将构造另一个查询,对原始查询

方法从上下文中的x返回
查询的
IQueryable
结果。y选择x
查询

然后调用方法调用该结果集上的
。其中(a=>…)

整个
x
是否将在
IQueryable
中返回,然后进行过滤?或者LINQ会延迟地加载它,并且只有在迭代resultset之后,才会执行实际的SQL查询(使用
where
条件)


这是针对MSSQL数据库使用EntityFramework LINQ to Entities。

如果该方法返回一个
IQueryable
,则返回的是查询,而不是查询结果。因此,调用
Where
将构造另一个查询,对原始查询应用过滤器。。。仍然使用表达式树

因此,当您实际开始对结果进行迭代时,整个查询将转换为SQL,包括过滤器


如果该方法返回了一个
IEnumerable
,那么它仍然表示查询(而不是结果),但是,
Where
调用将使用LINQ对对象进行过滤,因此过滤将在客户端而不是数据库中进行。

@Shoe:使用VS调试器完全回答OP的问题并不简单(特别是电动咖啡澄清了这一点)。也就是说,通过SQLServerProfiler监视正在触发的SQL查询非常容易。我建议使用LinqPad进行这种实验,它可以输出为给定请求生成的SQL。。。这是我尝试的第一件事。我不知道LinqPad,那看起来真的很有用。谢谢你的帮助,布莱恩。@CraigSaboe:当然。请参阅官方文档。为我很好地清理了它。。。非常感谢。仍在努力学习EF的细节。