如何"返回(从上下文中的tbl。[tablename] select tbl)"如果调用方法然后执行.Where()结果?

时间:2014-07-30 20:15:24

标签: c# sql-server linq entity-framework

方法返回IQueryable<T>查询的from x in context.y select x结果。

然后调用方法在该结果集上调用.Where( a => ...)

x中是否会返回IQueryable<T>的全部内容,然后将过滤掉?或者LINQ会延迟加载,只有在迭代结果集后,才会执行实际的SQL查询(使用where条件)?

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

1 个答案:

答案 0 :(得分:4)

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

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

如果该方法返回了IEnumerable<T>,那么它仍将代表查询(而不是结果),但Where调用将使用LINQ to Objects - 因此过滤将发生在客户端而不是在数据库中。