用小词解释为什么需要IQueryable <T>

rip*_*234 3 .net linq ienumerable iqueryable

这个... MSDN页面,IQueryable(Of T)接口.你能更好地解释为什么我们需要一个不在IEnumerable上添加任何方法的标记接口吗?

Jon*_*eet 12

IQueryable<T>也延伸IQueryable.基本上它是一个IQueryable可以强类型方式枚举的.(这两个IQueryableIEnumerable<T>已经延长IEnumerable,所以它不是对前面添加任何东西.)

现在,有一个强类型IQueryable允许LINQ to SQL(等)强类型 - 否则你不能在Where没有强制转换的情况下编写子句等.涉及的实际LINQ方法属于Queryable类型,主要是镜像Enumerable方法,但采用表达式树而不是委托.(如果之前没有使用表达式树,它们基本上是描述代码的数据结构- 而委托就是代码本身.所以你可以执行委托,但是你可以检查一个表达式树来看看它会做什么. )


And*_*are 5

IQueryable<T>是必需的,因为它定义了LINQ提供者所需的合同.许多可用的扩展方法IQueryable<T>旨在接受表达式而不是委托.

这很重要,因为LINQ提供程序需要分析表达式树而不是调用委托.