IQueryable与IEnumberable的区别
类别:编程学习 浏览量:418
时间:2014-12-16 IQueryable与IEnumberable的区别
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 server profiler监视的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 server profiler监视的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的实例说明二
static void Main(string[] args)
{
//创建数据库访问网关
using (SchoolDBEntities schoolEntities = new SchoolDBEntities())
{
//查询的结果放入IQueryable接口的集合中
IQueryable<T_Class> classesIQue = (from c in schoolEntities.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 in schoolEntities.T_Class
orderby c.ID
select c).AsEnumerable<T_Class>().Skip<T_Class>(3).Take<T_Class>(3);
//因为启用了延迟加载机制,所以下面调用一下,才会真正去读取数据库
int i = 0;
foreach (var c in classesIQue)
{
i++;
}
Console.WriteLine(i);
foreach (var c in classesIEnu)
{
i++;
}
Console.WriteLine(i);
}
Console.WriteLine("OK");
Console.ReadKey();
}
最终执行的sql
1、直接返回 IQueryable类型的查询,如下图所示:
标签:List
您可能感兴趣
- 修改ubuntu 18.04的sources.list源为阿里或清华镜像的方法(修改ubuntu 18.04的sources.list源为阿里或清华镜像的方法)
- css按钮样式实例(CSS使用classList实现两个按钮样式的切换)
- C#泛型List的用法
- ubuntu中source指令(怎么修改Ubuntu的源列表source list详解)
- python 自定义获取文件目录(Python使用os.listdir和os.walk获取文件路径与文件下所有目录的方法)
- list使用linq排序
- C# Checklistbox的用法
- python把str转成list(python3 字符串/列表/元组str/list/tuple相互转换方法及join函数的使用)
- mysql的三种模式(详解 MySQL的FreeList机制)
- idea的tomcat怎么关闭(解决Idea的tomcat启动报多个listener的错误问题)
- MVC中使用DropDownList
- html元素和属性的区别(HTML5 HTMLCollection和NodeList的区别详解)
- C#中ArrayList与Array的区别
- python怎么从数组中取内容(python调用c++ ctype list传数组或者返回数组的方法)
- ASP.NET List 集合操作
- 数组、ArrayList和List的区别
- 指天椒紫苏爆炒牛肉(指天椒紫苏爆炒牛肉)
- 谷雨前,吃牛羊肉别忘了吃河鲜,除湿还清热,加紫苏一炒特解馋(吃牛羊肉别忘了吃河鲜)
- 紫苏牛肉锅里滚一滚,香的鼻子都要掉了(紫苏牛肉锅里滚一滚)
- 每天都吃水果的好处(每天吃水果的好处与功效)
- 苹果15价格(苹果15价格512g官网)
- 春节放假几天(春节放假几天2023法定几天)
热门推荐
- tensorflow自定义初始化(Tensorflow分类器项目自定义数据读入的实现)
- linux nginx搭建(Ubuntu使用nginx搭建webdav文件服务器的详细过程)
- apache持续连接时间设置(Apache增加最大连接数的方法)
- apache克隆后自动关闭(Apache 本地服务器启动后又自动停止解决办法)
- css代码使用方法(写出牛逼的CSS代码13条建议你会哪几条)
- css3伸缩布局及使用方法(利用CSS3的flexbox实现水平垂直居中与三列等高布局)
- dedecms列表分页代码(Dedecms文章设置推荐后列表页标题自动加粗的解决方法)
- Visual Studio中 sln 和 suo 文件
- 数据库大数据访问的解决方法
- mysql分页查询有几种(MySQL 查询的排序、分页相关)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9