因此IQueryable允许您的查询在数据库级别执行,而不是在IEnumerable之类的内存中对象集合中执行。如果我有一个IEnumerable并且我在其上调用AsQueryable()扩展方法,这是否意味着它现在是一个IQueryable并且所有调用都将在数据库中执行?或者IEnumerable已经加载到内存中了吗?
我知道IEnumerable已经修改了执行,所以这意味着在迭代集合之前调用AsQueryable会使所有查询在数据库中执行吗?
对不起,我是新来的,这一切都让人非常困惑。
PS - 我正在使用带有EF 4.0的LINQ to Entities。
答案 0 :(得分:2)
如果你拥有的对象(如IEnumerable<T>
)也实现了 IQueryable<T>
,那么你可能会很幸运,但在一般情况下:不。除了那个角落情况之外,它太晚了,你不能再“组成”查询(即添加将由DB处理的“where”条件)。相反,你所拥有的是LINQ-to-Objects尽其所能看起来可查询。但是数据将从底层可枚举中线性消耗。