当前位置: 首页 > news >正文

IEnumerable VS IQueryable

使用LINQ从数据库和集合中查询数据时,我们使用IEnumerable和IQueryable进行数据处理。 IQueryable继承自IEnumerable,因此IQueryable具有IEnumerable的所有功能,除此之外,它还具有自己的功能。 两者都有自己的重要性来查询和操作数据。 让我们看看二者的优势,并利用它们的优势来提升你的LINQ Query性能。

IEnumerable

  1. IEnumerable存在于System.Collections命名空间中。

  2. IEnumerable只能在集合上向前移动,它不能向后移动和在Items之间移动。

  3. IEnumerable最好从内存中的集合查询数据,如List、Array等。当从数据库查询数据时,IEnumerable在服务器端执行select查询,然后在客户端加载内存中的数据,最后过滤数据。

  4. IEnumerable适用于LINQ to Object和LINQ to XML查询。

  5. IEnumerable支持延迟执行。

  6. IEnumerable不支持自定义查询,也不支持延迟加载。 因此不适合类似于分页的场景。

  7. IEnumerable支持扩展方法以获取实用对象。

IEnumerable示例:

 

MyDataContext dc = new MyDataContext ();
IEnumerable<Employee> list = dc.Employees.Where(p => p.Name.StartsWith("S"));
list = list.Take<Employee>(10); 

 

以上查询将生成如下的SQL语句:

SELECT [t0].[EmpID], [t0].[EmpName], [t0].[Salary] 
FROM [Employee] AS [t0]
WHERE [t0].[EmpName] LIKE @p0

注意:在这个查询语句中缺少 [ TOP 10 ] ,因为IEnumerable是在客户端过滤数据的。

 

 

 

IQueryable

  1. IQueryable存在于System.Linq命名空间中。

  2. IQueryable只能在集合上向前移动,它不能向后移动和在项目之间移动。

  3. IQueryable最好从非内存集合中查询数据(如远程数据库,服务等)。从数据库查询数据时,IQueryable在服务器端执行带所有筛选器的SELECT查询。

  4. IQueryable适用于LINQ to SQL查询。

  5. IQueryable支持延迟执行。

  6. IQueryable支持使用CreateQuery和Execute方法进行自定义查询。

  7. IQueryable支持延迟加载。 因此,它适合于类似分页的场景。

  8. IQueryable支持扩展方法以使用表达式对象,表达式树。

IQueryable示例:

1  MyDataContext dc = new MyDataContext ();
2 IQueryable<Employee> list = dc.Employees.Where(p => p.Name.StartsWith("S"));
3 list = list.Take<Employee>(10); 

以上查询将生成如下的SQL语句:

SELECT TOP 10 [t0].[EmpID], [t0].[EmpName], [t0].[Salary] FROM [Employee] AS [t0]
WHERE [t0].[EmpName] LIKE @p0

注意:在这个查询语句中[ TOP 10 ] 是存在的,因为IQueryable是在SQLSERVER中执行带筛选条件的SQL语句的。

 

转载于:https://www.cnblogs.com/WinHEC/articles/enumerable-vs-iqueryable.html

相关文章:

  • 【注解】Annotation Target ElementType
  • docker compose 服务启动顺序控制
  • 《中国人工智能学会通讯》——1.39 结 论
  • win7旗舰版(可能是盗版^.^)开机提示准备桌面,进入桌面变了
  • CeBIT 2016不得不看之:中兴通讯不断成熟的‘智慧城市’
  • 使用C#生成随机密码(纯数字或字母)和随机卡号(数字与字母组合)
  • 曼迪安特警告:思科商业路由固件被感染
  • nginx 重定向浏览器url跳转和不跳转两种需求
  • 《中国人工智能学会通讯》——4.19 粒计算与不确定性
  • 分页技术关键代码(java连接mysql)
  • python地址解析经纬度,城市
  • 前端攻城师
  • python学习之老男孩python全栈第九期_day027知识点总结——反射、类的内置方法
  • 我的KT库之-----认识KT
  • 深度学习将成为中国监控市场增长的新引擎
  • “大数据应用场景”之隔壁老王(连载四)
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • Computed property XXX was assigned to but it has no setter
  • ES10 特性的完整指南
  • Fabric架构演变之路
  • JavaScript 基础知识 - 入门篇(一)
  • JavaScript新鲜事·第5期
  • k8s如何管理Pod
  • Laravel 中的一个后期静态绑定
  • python docx文档转html页面
  • Python 反序列化安全问题(二)
  • Python 基础起步 (十) 什么叫函数?
  • Selenium实战教程系列(二)---元素定位
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 代理模式
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 排序算法之--选择排序
  • 数据科学 第 3 章 11 字符串处理
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • ​configparser --- 配置文件解析器​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • (23)Linux的软硬连接
  • (4)事件处理——(7)简单事件(Simple events)
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (二)c52学习之旅-简单了解单片机
  • (附源码)计算机毕业设计高校学生选课系统
  • (数据结构)顺序表的定义
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .chm格式文件如何阅读
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .Net6使用WebSocket与前端进行通信
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [100天算法】-每个元音包含偶数次的最长子字符串(day 53)