Linq查询转换为lambda表达式?
from item in range where item % 2 ==0 select i ;
Linq查询转换为lambda表达式?
它的扩展方法是等价的。
range.where(item % 2 ==0).select(x=>x)
。
我觉得linq的第一种方法是通过编译器翻译下一个,如果是,那么是否有像这样的编译器的优化,而不是其他的?
否C#编译器不会在LINQ查询结束时删除.Select
调用。原因在于C#编译器不知道.Select
方法的功能,因此无法将其作为优化进行移除。
编译器不能拥有这方面的知识,因为它以非常灵活的方式绑定到Select
。它会考虑具有适当签名的目标类型上名为Select
的任何实例或扩展方法。您甚至可以定义自己的Select
方法来执行自定义操作,如日志记录。如果C#编译器在这种情况下删除Select
子句,它将打破这种类型的代码。
我写的所有这些查询都有相同的结果? – Freshblood 2010-06-08 14:50:42
@Floodblood,我不明白你的意思 – JaredPar 2010-06-08 14:57:26
是的,这三个查询产生的结果是我问的。 – Freshblood 2010-06-08 18:07:41
如果您手动编写,上述所有查询都返回相同的结果。但是编译器并不知道select方法中的内容。所以它不会达到这个水平。 – 2013-04-02 05:46:59