IQueryable与IEnumberable的区别有哪些



一、IEnumerable接口

公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代。也就是说:实现了此接口的object,就可以直接使用foreach遍历此object

 

二、IQueryable 接口

它继承 IEnumerable 接口,而因为.net版本加入Linq和IQueryable后,使得IEnumerable不再那么单调,变得更加强大和丰富。

 

三、IQueryable与IEnumberable的区别

1、IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了

2、IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。

 

四、IQueryable与IEnumberable的实例说明一


1、IEnumerable实例


var set3 = (from c in db.cms_certificateDetails select c).OrderByDescending(c => c.id).AsEnumerable()
 .Skip(150).Take(10);
 foreach (var cmsCertificateDetailse in set3)
 {
 Console.WriteLine(cmsCertificateDetailse.czry + ";" + cmsCertificateDetailse.kddh + "\\r\\n");//打印结果
}


生成的SQL 语句

SELECT 
[Extent1].[id] AS [id], 
[Extent1].[kddh] AS [kddh], 
[Extent1].[czry] AS [czry], 
[Extent1].[yjnr] AS [yjnr], 
[Extent1].[tjTime] AS [tjTime], 
[Extent1].[bz] AS [bz], 
[Extent1].[forId] AS [forId]
FROM [dbo].[cms_certificateDetails] AS [Extent1]
ORDER BY [Extent1].[id] DESC

2、IQueryable实例


var set4 = (from c in db.cms_certificateDetails select c).OrderByDescending(c => c.id).AsQueryable()
 .Skip(150).Take(10);
 foreach (var cmsCertificateDetailse in set4)
 {
 Console.WriteLine(cmsCertificateDetailse.czry + ";" + cmsCertificateDetailse.kddh + "\\r\\n");//打印结果
}


生成的SQL语句

SELECT TOP (10) 
[Extent1].[id] AS [id], 
[Extent1].[kddh] AS [kddh], 
[Extent1].[czry] AS [czry], 
[Extent1].[yjnr] AS [yjnr], 
[Extent1].[tjTime] AS [tjTime], 
[Extent1].[bz] AS [bz], 
[Extent1].[forId] AS [forId]
FROM ( SELECT [Extent1].[id] AS [id], [Extent1].[kddh] AS [kddh], [Extent1].[czry] AS [czry], [Extent1].[yjnr] AS [yjnr], [Extent1].[tjTime] AS [tjTime], [Extent1].[bz] AS [bz], [Extent1].[forId] AS [forId], row_number() OVER (ORDER BY [Extent1].[id] DESC) AS [row_number]
    FROM [dbo].[cms_certificateDetails] AS [Extent1]
) AS [Extent1]
WHERE [Extent1].[row_number] > 150
ORDER BY [Extent1].[id] DESC



文章转载自:   IQueryable与IEnumberable的区别   http://www.studyofnet.com/news/730.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值