代码之家  ›  专栏  ›  技术社区  ›  Patrick Desjardins

IQueryable<t>vs IEnumerable<t>with lambda,选择哪个?

  •  8
  • Patrick Desjardins  · 技术社区  · 17 年前

    我对lambda做了越来越多的练习,但我不明白为什么有时使用示例 .AsQueryable(); 使用iqueryable,有时它省略了 asQueRabable(); 并使用IEnumerable。

    我读过 MSDN 但我不知道“执行表达式树”比“不执行”有什么优势。

    有人能给我解释一下吗?

    3 回复  |  直到 16 年前
        1
  •  6
  •   Andrew Theken Tan Li Hau    17 年前

    iqueryable实现了IEnumerable,所以现在,有了iqueryable,您可以用IEnumerable做任何可以做的事情。iqueryables处理将一些lambda表达式转换为基础数据源上的查询-这可能是SQL数据库或对象集。

    基本上,如果它是一个iQuery或IEnumerable,您通常不必以某种方式关心它。

        2
  •  6
  •   Arne Claassen    17 年前

    作为一个用户,您通常不必在意,它实际上是关于数据源的实现者。如果数据提供程序只是实现IEnumerable,那么您基本上是在执行对象的LINQ,即对集合执行内存操作。iqueryable为数据源提供了在执行表达式(通常通过枚举)后将表达式树转换为备用表示以供执行的功能,Linq2SQL、Linq2XML和Linq2Entities就是这样做的。

    我唯一能看到终端用户关心的是,他们是否希望检查将要执行的表达式树,因为iQuery公开表达式。另一个用途可能是检查提供者。但这两种情况都应该为其他查询提供者的实现者保留,并希望转换表达式。Linq的要点是,您不必关心要使用的表达式执行的实现。

        3
  •  1
  •   Shreedhar Kotekar    16 年前

    我同意ArneClaassen的观点,在某些情况下,您需要考虑数据源提供的底层实现。例如,检查这个 blog post 它显示了IEnumerable和IQueryable生成的SQL在某些场景中是如何不同的。