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,枚举该对象时,会立即反应查询结果. 如果是远程数据源,比如数 ...
随机推荐
- ubuntu 无pthread
由于学习多线程编程,所以用到pthread,但是man的时候却发现没有pthread函数库的手册页,然后安装 $sudo apt-get install glibc-doc 安装以后,发现还是有很多函 ...
- pytest_按标记执行
import pytest@pytest.mark.webtestdef test_send_http(): pass @pytest.mark.apptestdef test_devide(): p ...
- 框架_mybatis2使用注解
在dao中使用注解: package cn.dao; import cn.mepu.User; import org.apache.ibatis.annotations.Select; import ...
- 从零开始搭建系统1.3——Tomcat安装及配置
首先安装jdk,手动解压JDK的压缩包,然后设置环境变量 1.卸载自带openjdk 查询OpenJDK rpm -qa|grep java 批量卸载所有名字包含jdk的已安装程序.命令行: rpm ...
- 类 __init__的注意事项
class Dog(): class类 后面的ClassName类名第一个字母一定要大写. def __init__(self,name,age): 注意init前后是英文格式下,前后都是两道 ...
- easyui datagrid 绑定json对象属性的属性
今天用easyui 的datagrid绑定数据时,后台提供的数据是实体类类型的,其中有一个实体类A的属性b是另一个实体类B类型的,而前台需要显示b的属性c,这下就悲剧了,前台没法直接绑定了,后来脑筋一 ...
- 【JZOJ3918】蛋糕
description 今天是Bessie的生日,他买了一个蛋糕和朋友们一起分享,蛋糕可以看成是一个R行C列的表格,共有R*C个格子,每个格子都有一个0至9的数字,表示该格子蛋糕拥有的巧克力.现在Be ...
- php fopen用法以及解释
$log = fopen('./log.txt','a');//生成一个log.txt文件,a相当于文件的权限 fwrite($log,'成功'."\r\n");//写入文件 mo ...
- NX二次开发-UFUN多选菜单对话框uc1605
NX11+VS2013 #include <uf.h> #include <uf_ui.h> UF_initialize(); //多选菜单对话框 char sPromptSt ...
- Go的异常处理 defer, panic, recover
Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱.因为开发者很容易滥用异常, ...