[C#] IEnumerable vs IQueryable
这篇博客将介绍IEnumerable和IQueryable之间的区别。
1. IQueryable是继承自IEnumerable接口的。所以IEnumerable能做的,IQueryable都能做。

2. 先看代码,然后再讲两者之间的区别。
using (NerdDinnerDataContext context =
new NerdDinnerDataContext())
{
IEnumerable<Dinner> dinners = context.Dinners; IEnumerable<Dinner> filters = dinners.Where(d => d.DinnerID > ).ToList();
}
这段代码是去查询并找出DinnerID>0的所有Dinner。通过SQL Server Profiler可以看出,Where后面的过滤并没有在SQL中执行,而是将所有的Dinner集合返回到Client端,然后再进行Filter操作的。

下面将IEnumerable替换成IQueryable
using (NerdDinnerDataContext context =
new NerdDinnerDataContext())
{
IQueryable<Dinner> dinners = context.Dinners; IEnumerable<Dinner> filters = dinners.Where(d => d.DinnerID > ).ToList();
}
通过SQL Server Profiler可以看到,数据集的过滤是在DB一层执行的。


IQueryable与IEnumerable的区别在于前者的filter逻辑在DB端执行,后者的filter逻辑在Client端执行。
结论:
如果数据集合均为内存数据,建议使用IEnumerable。
如果数据是从数据库中获取,建议使用IQueryable,这样可以降低网络流量和充分利用SQL Server的处理能力。
感谢您的阅读~
[C#] IEnumerable vs IQueryable的更多相关文章
- Entity Framework返回IEnumerable还是IQueryable?
		在使用EF的过程中,我们常常使用repository模式,本文就在repository层的返回值是IEnumerable类型还是IQueryable进行探讨. 阅读目录: 一.什么是Repositor ... 
- IEnumerable和IQueryable的区别以及背后的ExpressionTree表达式树
		关于IEnumerable和IQueryable的区别,这事还要从泛型委托Func<T>说起.来看一个简单的泛型委托例子: class Program { static void Main ... 
- IEnumerable 与 Iqueryable 的区别
		IEnumerable 和 IQueryable 共有两组 LINQ 标准查询运算符,一组在类型为 IEnumerable<T> 的对象上运行,另一组在类型为 IQueryable&l ... 
- IEnumerable与IQueryable区别
		最近在使用MongoDB的时候,发现查询很慢,一个根据Id查询的语句竟然用了50秒,debug了一下,没发现什么大问题,但是另一个查询的语句只用了2秒,对比了一下,发现50s的那个语句使用的IEnum ... 
- 一个简单问题引发对IEnumerable和IQueryable的思考
		问题概述: 首先看下图,有客户表和客户负责人表关系是多对多,访问数据库使用的是EF所以这里我们开启了延迟加载,需求就是将每个客户的所有负责人逗号拼接显示在负责人这一栏位, 对你没看错需求就是这么 ... 
- 2019.03.22 读书笔记 Linq中的IEnumerable与IQueryable
		Linq主要分为 Linq to object .Linq to XML .Linq to sql(现在都用EF了). 针对object和sql,微软分别设计了两套接口IEnumerable.IQue ... 
- 【C#夯实】我与接口二三事:IEnumerable、IQueryable 与 LINQ
		序 学生时期,有过小组作业,当时分工一人做那么两三个页面,然而在前端差不多的时候,我和另一个同学发生了争执.当时用的是简单的三层架构(DLL.BLL.UI),我个人觉得各写各的吧,到时候合并,而他觉得 ... 
- Entity Framework Core今日所得:避免 IEnumerable 以及 IQueryable 陷阱
		避免 IEnumerable 以及 IQueryable 陷阱: IEnumerable示用Linq会先去数据库查询所有记录,然后再条件查询. IQueryable接口派生自IEnumerable,但 ... 
- C#  IEnumerable与IQueryable ,IEnumerable与IList ,LINQ理解Var和IEnumerable
		原文:https://www.cnblogs.com/WinHEC/articles/understanding-var-and-ienumerable-with-linq.html 使用LINQ从数 ... 
随机推荐
- sorl基本原理
			索引原理 场景:小时候我们都使用过新华字典,妈妈叫你翻开第38页,找到“坑爹”所在的位置,此时你会怎么查呢?毫无疑问,你的眼睛会从38页的第一个字开始从头至尾地扫描,直到找到“坑爹”二字为止.这种搜索 ... 
- mac 第一次安装mysql 5.7.12 不知道root 密码的解决办法
			搞了2个晚上,这个必须记录一下 1. 先从系统偏好设置里 把 mysql 停掉 2. 打开mac 命令行工具,sudo su 以管理员身份运行命令 3. cd /usr/local/ ... 
- docker 远程rest api 访问配置
			Docker RestApi 的配置及使用 Centos Docker1.12 远程Rest api访问的配置方法 http restapiv1.24 docker sdk for python 
- JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
			一般商业网站都有一个语言的需求,就是为了照顾使用正体中文的国人,会特地提供一个切换到正体中文的选项(或曰“繁体中文”).传统做法是在服务端完成的,即通过某些控件或者过滤器转换文本语言.这里笔者介绍一种 ... 
- Java开发中所涉及的常用远程调用
			根据<Spring in Action>一书中指出,Java开发中常见的远程过程调用(RPC),常见的有一下四种方式: 1.远程方法调用(RMI) 2.Caucho的Hessian和Bur ... 
- 渗透辅助神器 - DZGEN
			项目地址:https://github.com/joker25000/DZGEN git clone ┌─[root@sch01ar]─[/sch01ar] └──╼ #git clone https ... 
- 关于jquery中的parent的认定
			<li><label class='checkbox inline'><input type='checkbox' name='type[]' value='{$item ... 
- 简单获取各大视频网站的flash地址
			最近做网站的时候遇到一个需求:给定一个视频地址,获取它的swf地址.例如,给一个优酷的视频地址:http://v.youku.com /v_show/id_XNDg4MzY5ODU2.html,想获取 ... 
- dart 公共变量
			dart中可以直接在一个文件里声明一个变量,这在其他语言中并不常见,比如c#语言只有类型才可以在命名空间下定义,变量必须放在类里声明 所以dart这点特性类似于js 今天就来讨论这个公共变量的作用范围 ... 
- 前端开发之HTML篇二
			主要内容: 一.表格标签 -- table 二.表单标签 -- form 三.常用标签属性和分类 四.标签嵌套规则 1️⃣ 表格标签 -- table 表格由<table> 标签来定义. ... 
