Я понимаю, что использование скалярных или конверсионных функций вызывает немедленное выполнение запроса LINQ. Также я понимаю, что подзапросы выполняются по запросу внешнего запроса, который обычно будет один раз для каждого элемента. В следующем примере я буду прав, сказав, что внутренний запрос выполняется немедленно? Если это так, поскольку это приведет к скалярному значению, как это повлияет на работу внешнего запроса?LINQ - Отложенное выполнение в подзапросах
IEnumerable<string> outerQuery = names.Where (n => n.Length == names
.OrderBy(n2 => n2.Length).Select(n2 => n2.Length).First());
Я ожидаю, что приведенный выше запрос будет работать так же, как показано ниже, т.е. как если бы не был подзапрос.
int val = names.OrderBy(n2 => n2.Length).Select(n2 => n2.Length).First();
IEnumerable<string> outerQuery = names.Where (n => n.Length == val);
Этот пример был взят из Джозефа и Бен Albahari-х С # 4.0 в двух словах (CHP 8 Р331/332) и моя путаница проистекает из прилагаемой диаграммы, по-видимому, показывают, что подзапрос оценивается каждый раз, когда наружный запрос выполняет итерации через элементы имен.
Может ли кто-нибудь уточнить, как LINQ работает в этой настройке? Любая помощь будет оценена!
Hi Rionmonster, подзапросом будут имена .OrderBy (n2 => n2.Length). Выберите (n2 => n2.Length) .First() – Simon