博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IQueryable 和IEnumberable的区别
阅读量:5348 次
发布时间:2019-06-15

本文共 1477 字,大约阅读时间需要 4 分钟。

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

二、IQueryable 接口

提供对未指定数据类型的特定数据源的查询并进行计算的功能。public interface IQueryable : IEnumerable

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

三、为了区分二者的区别,代码参考:

#region 数据列表        ///         /// 数据列表        ///         /// 
public ActionResult List() { //IQueryable IQueryable
userlistIQue = (from u in db.Student orderby u.id select u).Skip
(1).Take
(2); //IEnumerable IEnumerable
userlistIEnu = (from u in myteref.m_user orderby u.id select u).AsEnumerable
().Skip
(1).Take
(2); int i = 0; foreach (var c in studentlistIQue) { i++; } Console.WriteLine(i); foreach (var c in studentlistIEnu) { i++; } Console.WriteLine(i); return View(); } #endregion

 

四、总结:

IEnumerable查询必须在本地执行.并且执行查询前我们必须把所有的数据加载到本地.而且更多的时候.加载的数据有大量的数据是我们不需要的无效数据.但是我们却不得不传输更多的数据。

使用IEnumerable,所有对于IEnumerable的过滤,排序等操作,都是在内存中发生的。也就是说数据从数据库中获取放到到了内存中,然后在内存中进行过滤和排序操作。
IQueryable却总能只提供你所需要的数 据.大大减少了数据的传输
IQueryable的优势是它有表达式树,所有对于IQueryable的过滤,排序等操作,都会先缓存到表达式树中,只有当真正遍历发生的时候,才会将表达式树由IQueryProvider执行获取数据操作。

转载于:https://www.cnblogs.com/itxiaoyan2013/p/3918127.html

你可能感兴趣的文章
How to Find Research Problems
查看>>
Linux用户管理
查看>>
数据库第1,2,3范式学习
查看>>
《Linux内核设计与实现》第四章学习笔记
查看>>
使用iperf测试网络性能
查看>>
图片的显示隐藏(两张图片,默认的时候显示第一张,点击的时候显示另一张)...
查看>>
Docker 安装MySQL5.7(三)
查看>>
python 模块 来了 (调包侠 修炼手册一)
查看>>
关于CSS的使用方式
查看>>
分析语句执行步骤并对排出耗时比较多的语句
查看>>
原生JS轮播-各种效果的极简实现
查看>>
计数器方法使用?
查看>>
带你全面了解高级 Java 面试中需要掌握的 JVM 知识点
查看>>
sonar结合jenkins
查看>>
解决VS+QT无法生成moc文件的问题
查看>>
AngularJs练习Demo14自定义服务
查看>>
关于空想X
查看>>
CF1067C Knights 构造
查看>>
[BZOJ2938] 病毒
查看>>
webstorm修改文件,webpack-dev-server不会自动编译刷新
查看>>