【问题标题】:Does .AsQueryable() stop IEnumerable from pulling all into memory?.AsQueryable() 是否会阻止 IEnumerable 将所有内容都拉入内存?
【发布时间】:2011-01-16 07:18:24
【问题描述】:

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

我知道 IEnumerable 已延迟执行,这是否意味着在迭代集合之前调用 AsQueryable 会使它的所有查询在数据库中执行?

对不起,我是新手,这一切都很混乱。

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

【问题讨论】:

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


    【解决方案1】:

    如果您拥有的对象(如IEnumerable<T>也实现了 IQueryable<T>,那么您可能很幸运,但在一般情况下:没有。除了那种极端情况之外,为时已晚,您不能再“编写”查询(即添加将由数据库处理的“where”条件)。相反,您所拥有的是 LINQ-to-Objects 尽其所能看起来可查询。但是数据将从底层枚举中线性消耗。

    【讨论】:

    • 正如我所怀疑的那样。所以 AsQueryable 比其他任何东西都更适合强制转换。就像创建一个虚假的存储库来测试你的界面一样。
    • @Chevex - 完全正确。虽然这本身很危险,因为 L2O 可以处理比 L2S / L2E 等更多的构造
    猜你喜欢
    • 2021-04-14
    • 2016-11-05
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多