Откуда выражению LINQ известно, что Where () стоит перед Select ()?

Я пытаюсь создать поставщика LINQ. Я использую руководство LINQ: Создание серии поставщиков IQueryable , и я добавил код до LINQ: Создание поставщика IQueryable - Часть IV.

Я чувствую, как это работа и идея, стоящая за ней. Теперь я застрял на проблеме, которая связана не с кодом, а с пониманием.

Я запускаю это утверждение:

QueryProvider provider = new DbQueryProvider();
Query customers = new Query(provider);

int i = 3;
var newLinqCustomer = customers.Select(c => new { c.Id, c.Name}).Where(p => p.Id == 2 | p.Id == i).ToList();

Каким-то образом код или выражение знает, что Где предшествует Выберите . Но как и где?

В коде, который сортирует выражения, нет способа, на самом деле ToString () в режиме отладки показывает, что Select стоит перед Where .

Я пытался заставить код не работать. Нормально Я сначала выполнил Where , а затем Select .

Итак, как выражение сортирует это? Я не вносил никаких изменений в код в руководстве.

9
задан Peter Mortensen 9 October 2011 в 07:34
поделиться