IQueryable与IEnumerable的区别

1、从IQueryable的定义可以看出,它继承自IEnumerable;

 2、IQueryable是在数据库服务器端进行数据筛选的(服务器端评估),而IEnumerable是把数据加载到应用程序内存中,再进行筛选的(客户端评估);

在下面的例子中,在第一张图红色框中可以看到当我们使用IQueryable的时候,EF生成的SQL语句把Where筛选条件带上了;而第二张图中,当我们使用IEnumerable时,EF生成的SQL语句是没有Where筛选条件的;

 3、IQueryable是延迟执行的,从下图可以看出在执行遍历之前,对变量test的操作并没有实际执行数据库查询;

 

当一个方法的返回值仍然是IQueryable类型,这个方法一般就是非立即执行的方法,否则这个方法就是立即执行方法;从下图可以看到Count方法的返回类型为int类型,此时立即执行了SQL查询,而当我们使用OrderByDescending方法时,返回类型为IQueryable,此时没有立即执行SQL查询。

 利用IQueryable的延迟执行的特性,我们可以拼接出复杂的查询条件后再去执行查询。比如拼接好查询条件后,我们可以复用IQueryable来获取数据总数,然后在获取第一条数据;

 

posted @ 2024-03-19 14:49  开心的菜鸟程序猿  阅读(12)  评论(0编辑  收藏  举报