您的位置:首页 > 产品设计 > UI/UE

经典集合 与 IQueryable集合 的差别

2013-11-01 18:47 309 查看
经典集合 与 IQueryable集合 的差别

经典集合与IQueryable 集合存在本质的区别,经典结合是在内存中开辟一片区域用来存储数据,而IQueryable集合是延迟加载的集合,只有在用到的时候才会到数据库中查询并且加载数据,下面来介绍IQueryable集合的实现机制。

IQueryable 类型的内部构造:


下面来看一条在EF中进行查询的语句:



执行这条语句的以后,IQueryable<HKSJ_USERS> 类型的集合temp并没有数据,执行这条语句实际上做的事是:

1、将linq语句解析成表达式树,保存到temp的Expression中;
2、将HKSJ_USERS类型存到temp的ElementType中去;
3、将EF的provider加载到temp的Provider中去。

在我们遍历调用temp集合的时候,temp中的Provide就会解析temp中的Expression,得到sql语句,然后到数据库中查询数据并加载,这样看起来就好像temp中存有数据一样。

有了对IQueryable集合的认识,我们学习linq的时候就会很方便了,其实linq to sql,linq to xml ,linq to object 的不同点就在于provider不同,也就是对表达式树的解析方式不同
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: