IEnumerable 和 IQueryable
IEnumerable 是内存的操作,在内存里执行Linq操作(客户端评估)。
IQueryable 是分析预生成SQL语句,最后在数据库里执行(服务器端评估)。
IQueryable 遇到终结操作:遍历(真正需要取数据操作时),ToList,ToArray,Count,Max,Min等操作时,就会立即执行,将数据查询到内存里。
非终结操作: GroupBy,OrderBy。
可以通过这些方法的返回对象是 IEnumerable 还是 IQueryable 来确定SQL语句是否执行。
Part3-23:EF Core有了IEnumerable还要IQueryable干什么_哔哩哔哩_bilibili
EF执行SQL语句查询时,如果是 IQueryable 这种结果的查询,底层用的是DataReader读取,不是把数据全读取到内存,这样会耗费数据库链接,减少内存占用
如果遇到终结操作则会直接全查到内存里。
Part3-28:IQueryable是一次性把数据都加载到内存吗_哔哩哔哩_bilibili