Во время компиляции операторы Linq-To-Objects также переводятся в объекты дерева выражений? - PullRequest
0 голосов
/ 06 декабря 2011

Во время компиляции операторы LINQ, которые работают с IQueryable<T> (таким образом, операторы Linq-to-SQL и Linq-to-Entities), преобразуются в объекты дерева выражений, которые представляют код как данные.

a) Переводятся ли операторы LINQ, которые работают на IEnumerable<T> (таким образом, 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
              );

спасибо

1 Ответ

0 голосов
/ 08 декабря 2011

Если вы отражаете код, методы расширения IEnumerable фактически содержат реализацию для всего, что вы пытаетесь сделать.Если вы хотите построить сборку дерева выражений, просто включите метод расширения AsQueryable () в начале, чтобы ваш запрос стал:

var results = collection.AsQueryable().Select(item => item.id).Where(id => id > 10);
...