IQueryable <T> vs IEnumerable <T>与Lambda,可供选择?

Pat*_*ins 8 lambda c#-3.0

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

我已经阅读了MSDN,但我不知道"执行表达式树"是否优于其他优势.

有人可以向我解释一下吗?

And*_*ken 6

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

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


Arn*_*sen 6

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

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