方法返回IQueryable<T>
查询的from x in context.y select x
结果。
然后调用方法在该结果集上调用.Where( a => ...)
。
x
中是否会返回IQueryable<T>
的全部内容,然后将过滤掉?或者LINQ会延迟加载,只有在迭代结果集后,才会执行实际的SQL查询(使用where
条件)?
这是针对MSSQL数据库使用EntityFramework LINQ to Entities。
答案 0 :(得分:4)
如果方法返回IQueryable<T>
,则返回查询 - 而不是查询的结果。因此,调用Where
将构建另一个查询,将过滤器应用于原始查询...仍然使用表达式树。
因此,当您实际开始迭代结果时,整个查询将转换为SQL,包括过滤器。
如果该方法返回了IEnumerable<T>
,那么它仍将代表查询(而不是结果),但Where
调用将使用LINQ to Objects - 因此过滤将发生在客户端而不是在数据库中。