在编译时,在IQueryable<T>上操作的LINQ语句(即Linq-to-SQL和Linq-to-Entities语句)被转换为表达式树对象,该对象将代码表示为数据。
a)在IEnumerable<T>上操作的LINQ语句(也就是LINQ-to-Objects )也会被翻译成表达式树吗?
b)如果不是,LINQ-to-Object语句在编译时会发生什么?编译器会简单地将它们转换为适当的方法调用吗?例如,是下一个Linq-to-Objects语句:
var results = collection.Select(item => item.id).Where(id => id > 10);由编译器翻译成类似于以下内容的内容:
var results = Enumerable.Where(
Enumerable.Select(collection, item => item.id),
id => id > 10
);谢谢
发布于 2011-12-08 05:52:07
如果您反映代码,那么IEnumerable扩展方法实际上包含了您想要做的任何事情的实现。如果您希望它构建一个表达式树,只需在开头链接AsQueryable()扩展方法,这样您的查询就会变成:
var results = collection.AsQueryable().Select(item => item.id).Where(id => id > 10);https://stackoverflow.com/questions/8405423
复制相似问题