IEnumerable和IQueryable在使用时的区别

简介: 最近在调研数据库查询时因使用IEnumerable进行Linq to entity的操作,造成数据库访问缓慢。此文讲述的便是IEnumerable和IQueryable的区别。微软对IEnumerable的定义使用场景为Linq to Object,也就是涉及到内存操作时使用。

最近在调研数据库查询时因使用IEnumerable进行Linq to entity的操作,造成数据库访问缓慢。此文讲述的便是IEnumerable和IQueryable的区别。

微软对IEnumerable的定义使用场景为Linq to Object,也就是涉及到内存操作时使用。而对IQueryable的定义使用场景为Linq to SQL(Entity)。

因此,在执行Linq to SQL(Entity)的操作时,如果使用IEnumerable则会造成全表查询。如下图Code:

    

 

  如此,在SQL Profile监测到的执行语句为两次全表查询。

    

    

   然而,当我们正确使用IQueryable或者var时,如下图Code:

    

  得到的查询语句为:

    

 

为了一探IEnumerabel和IQueryable在实际工作中的程序执行效率,总结来下图的时间对比:

  

在这张图上看到的时间单位虽然为毫秒,但这是代码同步执行语句的查询时间,但多个客户端同时访问数据库时,此时造成的数据访问速度就不再是毫秒了。

 

墨匠
目录
相关文章