IQueryable和IEenumerable
无论是在ado.net EF或者是在其他的Linq使用中,我们经常会碰到两个重要的静态类Enumerable、Queryable,他们在System.Linq命名空间下。那么这两个类是如何定义的,又是来做什么用的呢?特别是Queryable类,它和EF的延迟加载技术有什么联系呢?
在此处附上我自己的理解,如有偏差,欢迎指正
相同: IQueryable和IEenumerable都是把查询条件保存起来,并没有真正执行查询语句,必须要ToList(),FirstOrDerault()或者foreach的时候才会真正去查询
不同:1.继承了IEenumerable接口的都可以foreach.
2.IQueryable是应用所以Linq语句主装了一个完整的sql语句,IEnumerable是把数据的读取,然后在内存里面筛选。
默认情况下都是使用IQuerable,当你想筛选或者使用聚合函(Count())时,可以使用IEnumerable(增大传输的数据量,把计算转移到客户端,减轻了数据库计算压力)
如果使用IEnumerable,数据一次性加载到本地内存中,在本地内存中进行筛选,如果数据量大了,会崩溃的。