Linq查询转换为lambda表达式?

时间:2010-06-08 14:35:02

标签: c# .net linq

from item in range where item % 2 ==0 select i ;

扩展方法等同于它。

range.where(item % 2 ==0).select(x=>x)

我觉得linq的第一种方式是通过编译器翻译下一个,如果是,那么编译器是否有任何优化,例如range.where(item & 2 == 0)而不是其他编译器?

1 个答案:

答案 0 :(得分:2)

在LINQ查询结束时,C#编译器不会删除.Select调用。原因是C#编译器不知道.Select方法的作用,因此无法将其作为优化删除。

编译器无法掌握这些知识,因为它以非常灵活的方式绑定到Select。它将考虑具有适当签名的目标类型上名为Select的任何实例或扩展方法。您甚至可以定义自己的Select方法来执行日志记录等自定义操作。如果C#编译器在这种情况下删除了Select子句,它将破坏这种类型的代码。