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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章