EntityFramework中IEnumerable和IQueryable的含义和区别

  先说下IList,IList对SQL语句是即时执行的,IEnumerable和IQueryable是延时执行的,用到才执行。

  IQueryable和IEnumerable在每次执行时都必须连接数据库读取,而IList读取一次后,以后各次都不需连接数据库。前两者很容易造成重复读取,性能低下,并且可能引发数据不一致性。

  IQueryable和IEnumerable的区别:IEnumberalb使用的是LINQ to Object方式,它会将AsEnumerable()时对应的所有记录都先加载到内存,然后在此基础上再执行后来的Query。所以

如果执行的SQL是"select top(5) ...",然后要在5里面select top2,会在内存中选择前两条记录返回。

  IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向

SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。

posted @ 2013-07-22 10:58  情若天_RunUp  阅读(346)  评论(3编辑  收藏  举报