我使用Lambda进行越来越多的练习,但我不知道为什么某些时候使用.AsQueryable();
使用IQueryable,有时省略.AsQueryable();
并使用IEnumerable。
我已经阅读了MSDN,但我不知道“执行表达式树”是否优于其他优势。
任何人都可以向我解释一下吗?
答案 0 :(得分:6)
IQueryable实现IEnumerable,所以马上就可以使用IQueryable,你可以用IEnumerable做所有事情。 IQueryables处理将一些lambda表达式转换为基础数据源的查询 - 这可以是SQL数据库或对象集。
基本上,如果它是IQueryable或IEnumerable,你通常不应该关心这种或那种方式。
答案 1 :(得分:6)
作为用户,您通常不必关心,它实际上是关于数据源的实现者。如果数据提供者只是实现了IEnumerable,那么你基本上就是对象执行LINQ,即它在集合的内存操作中。 IQueryable为数据源提供了在表达式执行后(通常通过枚举)将表达式树转换为替代表示形式以执行的能力,这就是Linq2Sql,Linq2Xml和Linq2Entities所做的事情。
我唯一能看到最终用户关怀的是,他们是否希望检查将要执行的Expression树,因为IQueryable暴露了Expression。另一个用途可能是检查提供者。但是这两种情况都应该真正保留给其他查询提供程序的实现者,并希望转换表达式。 Linq的观点是你不必关心要使用的表达式执行的实现。
答案 2 :(得分:1)
我同意Arne Claassen的观点,有些情况下您需要考虑数据源提供的潜在影响。例如,检查此blog post,它显示IEnumerable和IQueryable生成的SQL在某些情况下是如何不同的。