.AsQueryable()是否阻止IEnumerable全部进入内存?

时间:2011-01-16 07:18:25

标签: c# linq entity-framework linq-to-entities

因此IQueryable允许您的查询在数据库级别执行,而不是在IEnumerable之类的内存中对象集合中执行。如果我有一个IEnumerable并且我在其上调用AsQueryable()扩展方法,这是否意味着它现在是一个IQueryable并且所有调用都将在数据库中执行?或者IEnumerable已经加载到内存中了吗?

我知道IEnumerable已经修改了执行,所以这意味着在迭代集合之前调用AsQueryable会使所有查询在数据库中执行吗?

对不起,我是新来的,这一切都让人非常困惑。

PS - 我正在使用带有EF 4.0的LINQ to Entities。

1 个答案:

答案 0 :(得分:2)

如果你拥有的对象(如IEnumerable<T>也实现了 IQueryable<T>,那么你可能会很幸运,但在一般情况下:不。除了那个角落情况之外,它太晚了,你不能再“组成”查询(即添加将由DB处理的“where”条件)。相反,你所拥有的是LINQ-to-Objects尽其所能看起来可查询。但是数据将从底层可枚举中线性消耗。