EFCore——IQueryable与IEnumerable的区别(13)
IQueryable与IEnumerable的区别
- 一、IQueryable与IEnumerable的简单实例
- 二、IQueryable与IEnumerable的区别
一、IQueryable与IEnumerable的简单实例
1.IEnumble
List<Comment> list = new List<Comment>();
list.Where(c => c.Message.Contains("微软"));
//当我们转到where定义发现如下
//这里where可以看到用的是IEnumerable
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
2.IQueryable
IQueryable<Comment> cmts = ctx.Comments.Where(c => c.Message.Contains("微软"));foreach(var item in cmts){Console.WriteLine(item.Message);}
//当我们转到where定义发现如下 ,这里用到的IQueryable
public static IQueryable<TSource> Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate)
二、IQueryable与IEnumerable的区别
1.简单简介
(1)对于DbSet与普通集合而言,虽然用起来是一样的,但转到定义看到的方法不同
(2)对于普通集合(IEnumerable),是在内存中过滤的,就是说先从服务器中把数据加载出来再进 行筛选。(客户端评估)
IQueryable:他是直接在服务端进行数据的筛选过滤(将查询操作翻译成sql在数据库操作),然后把筛选完的数据在传给客户端内中 (服务端评估)
2.实例
(1)接下来会列举两个例子,一个用 IQueryable cmts 另一个用 IEnumerable cmts,猜一下两个执行的sql语句是否一样
IQueryable<Comment> cmts = ctx.Comments;IEnumerable<Comment> comment = cmts.Where(c => c.Message.Contains("失业"));foreach (var item in comment){Console.WriteLine(item.Message);}
IQueryable执行的sql
SELECT [t].[Id], [t].[Message], [t].[TheArticleId]FROM [T_Comments] AS [t]WHERE CHARINDEX(N'失业', [t].[Message]) > 0
IEnumerable<Comment> cmts = ctx.Comments;IEnumerable<Comment> comment = cmts.Where(c => c.Message.Contains("失业"));foreach (var item in comment){Console.WriteLine(item.Message);}
IEnumerable执行的sql
SELECT [t].[Id], [t].[Message], [t].[TheArticleId]FROM [T_Comments] AS [t]
(2)区别
这里可以看出,在IQueryable中,执行的sql是完整的sql,直接在数据库查早Message匹配的消息。而在IEnumerable中,先是查询全部信息,在内存中查早Message含有“失业了”的消息
这就是IQueryable与IEnumerable的区别
IEnumerable在内存中筛选数据,IQueryable将linq翻译成sql,放到数据库查询
EFCore——IQueryable与IEnumerable的区别(13)相关推荐
- 【C#】IQueryable和IEnumerable的区别
IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IQueryable 接口 ...
- IQueryable 和 IEnumerable 的区别
在C#中使用 Linq to sql 时,经常搞混 IQueryable 和 IEnumerable 这两种类型,本文简单分析下它们之间的区别和使用场景. 前言 不管是Linq to object,还 ...
- C# IQueryable 和 IEnumerable 的区别
这是 EF Core 系列的最后一篇文章,按照上一篇的计划,我们最后就讲一讲 IQueryable 和 IEnumerable 的区别. 点击上方或后方蓝字,阅读 EF Core 系列合集. 在前面的 ...
- C#中IQueryable和IEnumerable的区别
IQueryable接口是继承自IEnumerable的接口 IQueryable中有表达式树, 这可以看作是它的一个优势.所以,使用IQueryable操作时,比如对数据的过滤,排序等操作, 这些都 ...
- IQueryable和IEnumerable的区别
转载于:https://www.cnblogs.com/myyBlog/p/8961062.html
- IQueryable和IEnumerable,IList的区别
IQueryable和IEnumerable都是延时执行(Deferred Execution)的,而IList是即时执行(Eager Execution) IQueryable和IEnumerabl ...
- EntityFramework中IEnumerable和IQueryable的含义和区别
先说下IList,IList对SQL语句是即时执行的,IEnumerable和IQueryable是延时执行的,用到才执行. IQueryable和IEnumerable在每次执行时都必须连接数据库读 ...
- 对IQueryable和IEnumerable的认识
** IQueryable和IEnumerable的区别 public static IQueryable<TSource> Where<TSource>(this IQuer ...
- IQueryable和IEnumerable区别
IQueryable 和IEnumerable总结 1,IEnumerable<T> result = (from t in context.Table order by t.Id se ...
最新文章
- PyTorch 笔记(03)— Tensor 数据类型分类(默认数据类型、CPU tensor、GPU tensor、CPU 和 GPU 之间的转换、数据类型之间转换)
- DHTML中style的display和visibility属性
- Python教程:对 a = [lambda : x for x in range(3)] 的理解
- @DateTimeFormat注解
- python dataframe 列赋值_dataframe根据新列特征的条件为其赋值,给
- cmd运行python程序
- vmware+centeros7安装JavaJDK
- 计算机基础【面试遇到】
- spring bean加载过程_Spring的Bean加载容器机制
- Python 异常(Exception)
- 如何调试Python extension
- cstring判断包含字符串_Power Query中判断字符串中是否包含有字母的三种解决办法...
- 焊接工时简便计算工具_2020年新版机械加工工时费用计算(17页)-原创力文档...
- html设置div大小位置不变,div大小 div固定大小设置
- 茶叶的基本知识,喝茶的好处和坏处
- 刚才对着电脑发呆了很久,天马行空想起在B站看到的两句话,感悟颇多,活出一个真正有灵魂的人吧。分享给大家。
- 语音验证码接口PYTHO语言
- 【python批量插入图片到一个pdf中】
- MT4 获取当前订单的开单价格
- java反算坐标方位角,根据经纬度求方位角,以北为0,顺时针为正方向
热门文章
- JS七种加密解密方法
- windows自动关闭nginx脚本
- 微软四月补丁星期二值得关注的漏洞
- libevent学习笔记五——socketpair
- 选项卡 bootstrap_使Bootstrap选项卡与砌体一起发挥作用
- 使用xlwings如何使用UnMerge() 方法取消合并单元格之后,多出来的单元格自动填充为第一个单元格的值?...
- 分享个用于老师在家长群发布通知的小程序
- oracle12520,一次意外的ORA-12520
- docker启动容器失败解决
- Python多线程编程(一):threading 模块 Thread 类的用法详解