Компилируется, потому что синтаксис запроса LINQ представляет собой лексическую замену .Компилятор превращает
int query = from x in proxy
where x
select x;
в
int query = proxy.Where(x => x); // note it optimises the select away
и только , затем проверяет, действительно ли существуют методы Where
и Select
для типаproxy
.Соответственно, в приведенном вами конкретном примере Select
фактически не требуется для компиляции.
Если бы у вас было что-то вроде этого:
int query = from x in proxy
select x.ToString();
, тогда это изменилось быв:
int query = proxy.Select(x => x.ToString());
и будет вызван метод Select
.