dar*_*yal 3 .net c# linq performance
假设在内存列表上运行了两个查询;
第一个查询(使用扩展方法):
var temp = listX.Where(q => q.SomeProperty == someValue);
第二个查询:
var temp = from o in listX
where o.SomeProperty == someValue
select o;
Run Code Online (Sandbox Code Playgroud)
两个查询在性能方面是否存在差异; 如果有,为什么?
不,没有任何区别.编译器在内部将第二个版本转换为第一个版本.
C#规范(第7.6.12节)规定:
C#语言未指定查询表达式的执行语义.相反,查询表达式被转换为符合查询表达式模式(第7.16.3节)的方法的调用.具体而言,查询表达式被转换成的命名方法的调用
Where,Select,SelectMany,Join,GroupJoin,OrderBy,OrderByDescending,ThenBy,ThenByDescending,GroupBy,和Cast预期.这些方法具有特定签名和结果类型,如在§7.16.3说明.这些方法可以是被查询对象的实例方法,也可以是对象外部的扩展方法,它们实现查询的实际执行.从查询表达式到方法调用的转换是在执行任何类型绑定或重载解析之前发生的语法映射.保证翻译在语法上是正确的,但不能保证生成语义正确的C#代码.在转换查询表达式之后,生成的方法调用将作为常规方法调用进行处理,这可能反过来发现错误,例如,如果方法不存在,参数类型错误,或者方法是通用的,类型推断失败.