[置顶] IQueryable & IEnumberable 区别
Namespace And Inheritances Relations
| 
1 
2 
3 
4 
5 
6 
7 
8 
9 | Namespace:
 System.Collections    [ComVisibleAttribute(true)]    [GuidAttribute("496B0ABE-CDEE-11d3-88E8-00902754C43A")]    publicinterfaceIEnumerableNamespace:
 System.Collections.Generic    publicinterfaceIEnumerable
 : IEnumerableNamespace:
 System.Linq    publicinterfaceIQueryable
 : IEnumerable    publicinterfaceIQueryable
 : IEnumerable, IQueryable, IEnumerable | 
| 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 | staticvoidMain(string[]
 args)        {            //创建数据库访问网关            using(SchoolDBEntities
 schoolEntities = newSchoolDBEntities())            {                //查询的结果放入IQueryable接口的集合中                IQueryable<T_Class>
 classesIQue = (from c inschoolEntities.T_Class                                                   orderby
 c.ID                                                     select
 c).Skip<T_Class>(3).Take<T_Class>(3);                //注意这个AsEnumerable<T_Class>()在分页查询之前,先将其转换成IEnumerable类型                IEnumerable<T_Class>
 classesIEnu = (from c inschoolEntities.T_Class                                                    orderby
 c.ID                                                       select
 c).AsEnumerable<T_Class>().Skip<T_Class>(3).Take<T_Class>(3);                //因为启用了延迟加载机制,所以下面调用一下,才会真正去读取数据库                inti
 = 0;                foreach(var
 c inclassesIQue)                {                    i++;                }                Console.WriteLine(i);                foreach(var
 c inclassesIEnu)                {                    i++;                }                Console.WriteLine(i);            }            Console.WriteLine("OK");            Console.ReadKey();        } | 
第一种:直接返回 IQueryable类型的查询,如下图所示:

第二种:在用分页查询之前先将其转换成 IEnumerable实际执行的sql如下图所示:

总结
IQueryable接口与IEnumberable接口的区别: IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤
(转载自:FlyDragon)
 
                    
                 
                
            
         
 浙公网安备 33010602011771号
浙公网安备 33010602011771号