IQueryable 和 IEnumerable(二)
IQueryable 和 IEnumerable的扩展方法
一
我们从ef的DbSet<T>看起来,我们看到他继承了IQueryable<T> 和 IEnumerable<T>

二
写了个例子,分别传入Expression<Func<T,bool>>和Func<T,bool>
static void Main(string[] args)
{
Test<Users> ut = new Test<Users>();
var q = ut.Find1(x => x.id == );
var v = ut.Find2(x => x.id == ); Console.ReadKey();
} public class Test<T> where T:class
{
// EF
Entities dbEF = new Entities();
public virtual T Find1(Expression<Func<T, bool>> where1)
{
T _entity = dbEF.Set<T>().FirstOrDefault<T>(where1);
return _entity;
} public virtual T Find2(Func<T, bool> where2)
{
T _entity = dbEF.Set<T>().FirstOrDefault<T>(where2);
return _entity;
}
}
查看运行结果:结果是一致的

我们看看他们的扩展实现:
Queryable

我们看到,其实通过Queryable扩展,我们传入了Expression<Func<T,bool>>
看一下sqlprofile

结果:查询时,通过Expression,我们直接组装成了带条件的sql语句进行查询。
Enumerable

我们看到,其实通过Enumerable扩展,我们传入了Func<T,bool>
看一下sqlprofile

结果:查询时,通过Func,我们直接查询了全表。
然后在全部结果加载到缓存后,我们才进行了id==1的筛选
所以结果很明显:
IQueryable 通过Expression拼接表达式树,然后组装sql语句进行滤查查询
IEnumerable 直接查询后,通过传入的Func方法,在缓存里进行过滤查询
IQueryable 和 IEnumerable(二)的更多相关文章
- IQueryable 和 IEnumerable
IQueryable 和 IEnumerable 其实,对于上面的即有过虑又有排序的条件查询Linq语句,EF是读取数据库中整个Books表中的数据到内存,还是根据Linq查询语句智能的生成SQL再执 ...
- IQueryable和IEnumerable,IList的区别
IQueryable和IEnumerable都是延时执行(Deferred Execution)的,而IList是即时执行(Eager Execution) IQueryable和IEnumerabl ...
- C# IQueryable和IEnumerable的区别
在使用EF查询数据的时候,我们常用的查询数据方式有linq to sql,linq to object, 查询返回的结果有两种类型:IQueryable.IEnumerable,两者内部的处理机制是完 ...
- C#编程之IList<T>、List<T>、ArrayList、IList, ICollection、IEnumerable、IEnumerator、IQueryable 和 IEnumerable的区别
额...今天看了半天Ilist<T>和List<T>的区别,然后惊奇的发现使用IList<T>还是List<T>对我的项目来说没有区别... 在C#中 ...
- IQueryable和IEnumerable
使用EF你必须知道这两个的区别,可以帮助我们的提升性能. 表达树:Linq 表达 ①IQueryable和IEnumerable IQueryable 延时执行:扩展方法接受的是Expression( ...
- IQueryable和IEnumerable以及AsEnumerable()和ToList()的区别
注意:本文背景为 Linq to sql .文中ie指代IEnumerable,iq指代IQueryable. IQueryable 和 IEnumerable 的区别 IQueryable 延时执行 ...
- C#中IQueryable和IEnumerable的区别
最近的一个面试中,被问到IQueryable 和 IEnumerable的区别, 我自己看了一些文章,总结如下: 1. 要明白一点,IQueryable接口是继承自IEnumerable的接口的. 2 ...
- C# IEnumerable与IQueryable ,IEnumerable与IList ,LINQ理解Var和IEnumerable
原文:https://www.cnblogs.com/WinHEC/articles/understanding-var-and-ienumerable-with-linq.html 使用LINQ从数 ...
- 关于IQueryable和IEnumerable
园里对这两个已经有很多文章作了深入的介绍,我总结些,当成笔记用. 一.具体判断用哪个上,如果是运行在本地内存中的,用IEnumerable,枚举该对象时,会立即反应查询结果. 如果是远程数据源,比如数 ...
随机推荐
- gitnore文件修改生效方法
本文首发于cartoon的博客 转载请注明出处:https://cartoonyu.github.io/cartoon-blog 当修改gitnore文件后,常常出现文件不生效的情况, ...
- windows IIS FTP 不支持创建多级目录
昨天因为这个事情搞了好久,因为客户那边使用的是IIS 上的FTP ,想着都差不多试着运行,结果竟然报错,说"错误550 文件不可用" 是在GetResponse()出现的异常,我用 ...
- es6注意点
补救方法: 详情:http://es6.ruanyifeng.com/#docs/array 取出文本内容 实现深拷贝 jq实现不完全深拷贝 jQuery.extend = jQuery.fn.ext ...
- JavaScript深浅拷贝区别
分享一篇自己关注的微信订阅号(前端大全)文章:JavaScript浅拷贝与深拷贝 作者:浪里行舟 https://github.com/ljianshu/Blog/issues/5 这里很详细的讲解了 ...
- 框架_mybatis2使用注解
在dao中使用注解: package cn.dao; import cn.mepu.User; import org.apache.ibatis.annotations.Select; import ...
- UartAssist串口调试工具
第一步安装UartAssist 第二步打开UartAssist 界面为 我们将我们的wifi模块连接电脑, 查看的端口号通过计算机管理设备管理器进行查看 根据要求发送数据 就可以了
- java创建一个空白zip
String zipath = localpath+zipname+".zip"; public static void createNewzip(String zipath) t ...
- delphi JPG转为BMP存入数据库
delphi JPG转为BMP存入数据库 必须在uses中引用JPEG procedure TForm1.BitBtn3Click(Sender: TObject);varjpg:TJPEGim ...
- Ruby 类和对象
Ruby 类和对象 Ruby 是一种完美的面向对象编程语言.面向对象编程语言的特性包括: 数据封装 数据抽象 多态性 继承 这些特性将在 面向对象的 Ruby 中进行讨论. 一个面向对象的程序,涉及到 ...
- 【转载】带你吃透RTMP
RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing) ...