Linq之IQueryable接口与IEnumberable区别
接口 区别 LinQ
2023-09-14 09:00:58 时间
IEnumerable接口
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/3217514.html
IEnumerable和IQueryable在使用时的区别 最近在调研数据库查询时因使用IEnumerable进行Linq to entity的操作,造成数据库访问缓慢。此文讲述的便是IEnumerable和IQueryable的区别。 微软对IEnumerable的定义使用场景为Linq to Object,也就是涉及到内存操作时使用。
公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代。也就是说:实现了此接口的object,就可以直接使用foreach遍历此object;
IEnumerable 包含一个方法,GetEnumerator,返回 IEnumerator。 IEnumerator 可以通过集合循环显示 Current 属性和 MoveNext 和 Reset 方法。
它是一个最优方法实现 IEnumerable 和 IEnumerator 在集合选件类启用 foreach (For Each 在 Visual Basic 中为) 语法,但是,IEnumerable 不需要实现。 如果集合中不实现 IEnumerable,您还必须遵循迭代器窗体通过提供返回接口、选件类或结构的 GetEnumerator 方法支持此语法。
IQueryable 接口继承 IEnumerable 接口,以便在前者表示一个查询时可以枚举该查询的结果。 枚举强制执行与 IQueryable 对象关联的表达式目录树。 “执行表达式目录树”的定义是查询提供程序所特有的。实现IQueryable接口可以实现自己的查询提供程序。
那么他们的区别到底在哪儿呢?下面看一个例子:
![复制代码](http://common.cnblogs.com/images/copycode.gif)
1 namespace Wolfy.LinqDemo 3 class Program 5 static void Main(string[] args) 7 using (UserInfoDataContext context = new UserInfoDataContext()) 10 //查询的结果放入IQueryable接口的集合中 11 IQueryable TB_UserInfo userInfoQuery= (from u in context.TB_UserInfos 12 orderby u.ID 13 select u).Skip TB_UserInfo (3).Take TB_UserInfo (3); 14 //注意这个AsEnumerable T_Class ()在分页查询之前,先将其转换成IEnumerable类型 15 IEnumerable TB_UserInfo userInfoEnum = (from u in context.TB_UserInfos 16 orderby u.ID 17 select u).AsEnumerable TB_UserInfo ().Skip TB_UserInfo (3).Take TB_UserInfo (3); 18 //执行查询 19 int i = 0; 20 foreach (var item in userInfoQuery) 22 i++; 24 foreach (var item in userInfoEnum) 26 i++; 28 Console.WriteLine("OK"); 29 Console.Read(); 33 }
![复制代码](http://common.cnblogs.com/images/copycode.gif)
直接返回IQueryable接口生成的sql语句
第二种:在用分页查询之前先将其转换成 IEnumerable实际执行的sql如下图所示
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/3217514.html
IEnumerable和IQueryable在使用时的区别 最近在调研数据库查询时因使用IEnumerable进行Linq to entity的操作,造成数据库访问缓慢。此文讲述的便是IEnumerable和IQueryable的区别。 微软对IEnumerable的定义使用场景为Linq to Object,也就是涉及到内存操作时使用。
相关文章
- 前端写接口 请求后台数据 存vuex中 打印到控制台「建议收藏」
- 13谈谈接口和抽象类有什么区别?
- 【说站】java抽象类和接口的区别探究
- restful api接口规范和服务调用的区别_rest接口规范
- JavaSE进阶_03_接口&多态
- 一些可以帮助你完成日常工作自动化的接口
- java——抽象类和接口有什么区别
- 企业微信api,企业微信sdk接口
- API接口测试-使用python发送HTTP请求(Requests)
- HLS四种方式推断出AXI4 Stream接口(1)
- c#面试题抽象类和接口的区别-金三银四面试:C#程序员经常遇到的30道基础面试题,想你所想
- c#面试题抽象类和接口的区别-最新数数网笔试题和面试题答案
- YesApi v5.0,一款立即搭建接口收费平台的神器
- 使用CXF调用Webservice接口添加SoapHeader
- 随机美图接口PHP代码
- 详细解析Java中抽象类和接口的区别详解编程语言
- Java抽象类和接口的区别
- 使用Oracle数据库接口进行数据库操作(oracle数据库接口)
- java抽象类和接口的区别详细解析
- 详细解析Java中抽象类和接口的区别