Как показывает предыдущий пример, запрос включает в себя переменные, типы которых связаны друг с другом. К их числу относятся переменная запроса, переменная диапазона и источник данных. Соблюсти соответствие этих типов данных очень важно, но в то же время нелегко — по крайней мере, так кажется на первый взгляд, поэтому данный вопрос заслуживает более пристального внимания.
Тип переменной диапазона должен соответствовать типу элементов, хранящихся в источнике данных. Следовательно, тип переменной диапазона зависит от типа источника данных. Как правило, тип переменной диапазона может быть выведен средствами С#. Но выводимость типов может быть осуществлена при условии, что в источнике данных реализована форма интерфейсаIEnumerable
var posNums = from int n in nums // ...
Очевидно, что явное указание типа здесь не требуется, поскольку все массивы неявно преобразуются в форму интерфейсаIEnumerable
Тип объекта, возвращаемого по запросу, представляет собой экземпляр интерфейсаIEnumerable
IEnumerable
where n > 0 select п^-