首页 新闻 会员 周边 捐助

关于Linq 与Lambda表达式,表达式树的疑问

0
悬赏园豆:10 [已关闭问题] 关闭于 2014-05-07 09:27

最近学表达式树,明白了Linq to sql 是采用表达式树来构造SQL字符串的,其中返回结果

IQueryable<T>类型

但如果是Linq to object ,返回的是IEnumerable<T>类型的,这个接口没定义表达式树。所以它在转换成本地可执行代码时,是转换的扩展方法吗?

比如

from a in student where a.age>3 select a 

转换成

student.where(p=> p.age>3) 这样吗?

 

请大神指教,LINQ表达式在不转换成表达式树情况下,究竟会转换成什么样的C#代码

在日码农的主页 在日码农 | 菜鸟二级 | 园豆:292
提问于:2014-05-06 14:16
< >
分享
所有回答(2)
0

Linq to object 直接就是执行委托了.传进去的直接执行就行了.因为不需要进行解析.

Linq to sql因为要转生成sql所以要解析表达式数

linq表达式不转成表达式树的时候他就是一个匿名委托

吴瑞祥 | 园豆:29449 (高人七级) | 2014-05-06 14:25
0
•LINQ 标准查询运算符,一组在类型为 IEnumerable<T> 的对象上运行,另一组在类型为 IQueryable<T> 的对象上运行。IEnumerable<T>  将数据存放在内存中。两者都具有延时加载的功能。
•IQueryable<T>    则是把数据存放在远程的服务器中. 只有你去遍历它的结果时候,他才执行相应的SQL语句,获得数据。参数是表达树;
IEnumerable<T> 则需要把数据放在内存中进行操作,所以一旦执行分页查询的时候,需要先加载所有的数据。条件参数是委托;
Richard__Lee | 园豆:29 (初学一级) | 2014-05-07 08:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册