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)相关推荐

  1. 【C#】IQueryable和IEnumerable的区别

    IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IQueryable 接口 ...

  2. IQueryable 和 IEnumerable 的区别

    在C#中使用 Linq to sql 时,经常搞混 IQueryable 和 IEnumerable 这两种类型,本文简单分析下它们之间的区别和使用场景. 前言 不管是Linq to object,还 ...

  3. C# IQueryable 和 IEnumerable 的区别

    这是 EF Core 系列的最后一篇文章,按照上一篇的计划,我们最后就讲一讲 IQueryable 和 IEnumerable 的区别. 点击上方或后方蓝字,阅读 EF Core 系列合集. 在前面的 ...

  4. C#中IQueryable和IEnumerable的区别

    IQueryable接口是继承自IEnumerable的接口 IQueryable中有表达式树, 这可以看作是它的一个优势.所以,使用IQueryable操作时,比如对数据的过滤,排序等操作, 这些都 ...

  5. IQueryable和IEnumerable的区别

    转载于:https://www.cnblogs.com/myyBlog/p/8961062.html

  6. IQueryable和IEnumerable,IList的区别

    IQueryable和IEnumerable都是延时执行(Deferred Execution)的,而IList是即时执行(Eager Execution) IQueryable和IEnumerabl ...

  7. EntityFramework中IEnumerable和IQueryable的含义和区别

    先说下IList,IList对SQL语句是即时执行的,IEnumerable和IQueryable是延时执行的,用到才执行. IQueryable和IEnumerable在每次执行时都必须连接数据库读 ...

  8. 对IQueryable和IEnumerable的认识

    ** IQueryable和IEnumerable的区别 public static IQueryable<TSource> Where<TSource>(this IQuer ...

  9. IQueryable和IEnumerable区别

    IQueryable 和IEnumerable总结 1,IEnumerable<T> result = (from t in context.Table  order by t.Id se ...

最新文章

  1. PyTorch 笔记(03)— Tensor 数据类型分类(默认数据类型、CPU tensor、GPU tensor、CPU 和 GPU 之间的转换、数据类型之间转换)
  2. DHTML中style的display和visibility属性
  3. Python教程:对 a = [lambda : x for x in range(3)] 的理解
  4. @DateTimeFormat注解
  5. python dataframe 列赋值_dataframe根据新列特征的条件为其赋值,给
  6. cmd运行python程序
  7. vmware+centeros7安装JavaJDK
  8. 计算机基础【面试遇到】
  9. spring bean加载过程_Spring的Bean加载容器机制
  10. Python 异常(Exception)
  11. 如何调试Python extension
  12. cstring判断包含字符串_Power Query中判断字符串中是否包含有字母的三种解决办法...
  13. 焊接工时简便计算工具_2020年新版机械加工工时费用计算(17页)-原创力文档...
  14. html设置div大小位置不变,div大小 div固定大小设置
  15. 茶叶的基本知识,喝茶的好处和坏处
  16. 刚才对着电脑发呆了很久,天马行空想起在B站看到的两句话,感悟颇多,活出一个真正有灵魂的人吧。分享给大家。
  17. 语音验证码接口PYTHO语言
  18. 【python批量插入图片到一个pdf中】
  19. MT4 获取当前订单的开单价格
  20. java反算坐标方位角,根据经纬度求方位角,以北为0,顺时针为正方向

热门文章

  1. JS七种加密解密方法
  2. windows自动关闭nginx脚本
  3. 微软四月补丁星期二值得关注的漏洞
  4. libevent学习笔记五——socketpair
  5. 选项卡 bootstrap_使Bootstrap选项卡与砌体一起发挥作用
  6. 使用xlwings如何使用UnMerge() 方法取消合并单元格之后,多出来的单元格自动填充为第一个单元格的值?...
  7. 分享个用于老师在家长群发布通知的小程序
  8. oracle12520,一次意外的ORA-12520
  9. docker启动容器失败解决
  10. Python多线程编程(一):threading 模块 Thread 类的用法详解