AsEnumerable的原因是
当序列实现IEnumerable(T)但也具有一组可用的公共查询方法时,可以使用AsEnumerable(TSource)(IEnumerable(TSource))在查询实现之间进行选择
因此,当您
Where之前调用该方法时,您所调用的是与
Where方法不同的方法
IEnumerable.Where。这
Where说法是对LINQ转换为SQL,新
Where是
IEnumerable一个接受一个
IEnumerable,列举并产生相匹配的项目。这就解释了为什么您看到正在生成不同的SQL。在将
Where扩展名应用于第二版代码之前,将从数据库中完整获取该表。这可能会造成严重的瓶颈,因为整个表必须存储在内存中,或者更糟的是,整个表必须在服务器之间移动。允许SQL
Server执行
Where并执行其最佳操作。



