C# “是怎么回事?”;返回(从上下文中的tbl。[tablename]选择tbl)";如果调用方法则执行,然后对结果执行.Where()?
方法从上下文中的x返回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将构造另一个查询,对原始查询
查询的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的细节。