代码之家  ›  专栏  ›  技术社区  ›  Albic

IQueryable是一个查询还是一个可以查询的对象?

  •  2
  • Albic  · 技术社区  · 15 年前

    IQueryable 接口实际上表示。

    的MSDN文档 可液化的 说:“为 计算查询 针对特定数据源。”

    文件 IQueryProvider 说:“定义创建和执行查询的方法 用可液化的物体描述 ."

    名称和文档摘要表明它是一个可以查询的对象/数据存储。第二句话和事实 ObjectQuery 实体框架实现中的类 可液化的 建议这是一个可以执行的查询。

    是我误解了什么,还是真的有点模糊?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Jon Skeet    15 年前

    一个 IQueryable

    你可以把它想象成 SqlCommand 对象-它有一个查询,它知道需要什么样的数据,但它本身不包含数据。

        2
  •  1
  •   jason    15 年前

    一个 IQueryable 表示可对其执行查询的源。它可以是SQL服务器上表的表示形式,也可以是对象的内存中集合。

    IQueryProvider 表示可以创建和执行由表达式树表示的查询的对象。例如,LINQ to SQL查询提供程序将获取表达式树并返回 可液化的 它允许您在枚举覆盖之前枚举覆盖(以获取结果)或进一步优化(通过组合查询)。

    有一个很好的 walkthrough 在MSDN上创建自己的 . 我认为如果你做这个演练,你会有一个更好的理解。

        3
  •  1
  •   Pete Montgomery    14 年前

    一个IQueryable代表两个(可以说是非常不同的)东西。它以对描述某些代码的表达式树的引用的形式表示查询,以对知道如何执行查询的“提供者”的引用的形式表示数据源。

    我认为您的困惑源于这样一个事实:文档只能讨论IQueryable实际定义的方法。IQueryable的大部分功能来自于它在Queryable类中定义的相关扩展方法的实现,但它们并不是IQueryable接口的严格组成部分。

    有趣!

    更新:重读您的问题,另一个有用的见解是 可查询。这是在LINQ中启用合成性的关键。所以IQueryable是一个查询,它是可查询的—所以类型名没有矛盾。