IQueryable的< T> vs IEnumerable< T>有Lambda,可以选择哪个?

StackOverflow https://stackoverflow.com/questions/245343

  •  05-07-2019
  •  | 
  •  

我使用Lambda做了越来越多的练习,但我不知道为什么有时会使用 .AsQueryable(); 来使用IQueryable,有时它会省略 .AsQueryable(); 并使用IEnumerable。

我已阅读 MSDN 但我不知道如何“执行表达式树”比没有优势。

任何人都可以向我解释一下吗?

有帮助吗?

解决方案

IQueryable实现IEnumerable,所以马上就可以使用IQueryable,你可以用IEnumerable做所有事情。 IQueryables处理将一些lambda表达式转换为基础数据源的查询 - 这可以是SQL数据库或对象集。

基本上,如果它是IQueryable或IEnumerable,你通常不应该关心这种或那种方式。

其他提示

作为用户,您通常不必关心,它实际上是关于数据源的实现者。如果数据提供者只是实现了IEnumerable,那么你基本上就是对象执行LINQ,即它在集合的内存操作中。 IQueryable为数据源提供了在表达式执行后(通常通过枚举)将表达式树转换为替代表示形式以执行的能力,这就是Linq2Sql,Linq2Xml和Linq2Entities所做的事情。

我唯一能看到最终用户关怀的是,他们是否希望检查将要执行的Expression树,因为IQueryable暴露了Expression。另一个用途可能是检查提供者。但是这两种情况都应该真正保留给其他查询提供程序的实现者,并希望转换表达式。 Linq的观点是你不必关心要使用的表达式执行的实现。

我同意Arne Claassen的观点,有些情况下您需要考虑数据源提供的潜在影响。例如,请查看此博客发布,显示IEnumerable和IQueryable生成的SQL在某些情况下是如何不同的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top