Как уже отмечали другие, результаты этого конкретного запроса включают анонимный тип .Поэтому вы не можете аннотировать метод как возвращающий точный тип локальной переменной, потому что вы не можете набрать имя этого типа , потому что у него нет имени;это то, что означает «анонимный».
Вы можете сказать, что метод возвращает IEnumerable<object>
или IEnumerable
, или object
, или даже dynamic
, но, вероятно, лучше всего сделать makeзапрос в первую очередь возвращает последовательность номинального типа.
В более общем плане: как уже отмечали другие, запрос , как правило , имеет своего рода IEnumerable
или IQueryable
типа на практике.Однако важно понимать, что выражение LINQ не обязательно имеет какой-либо конкретный тип.LINQ реализован в виде синтаксического преобразования , а не семантического преобразования.Когда вы говорите:
var query = from c in customers select c.Name;
, компилятор вслепую переводит это вслух в:
var query = customers.Select(c=>c.Name);
Тип query
- это то, что метод Select
возвращает.Это может быть int
!Это почти наверняка не так, потому что это будет тупой , но если какой-нибудь извращенный человек решит создать метод с именем Select
, который возвращает int
, тогда запрос будет иметь тип int
.
Как оказалось, я просто такой извращенный человек;Я привожу пример использования LINQ для управления целыми числами здесь:
http://blogs.msdn.com/b/ericlippert/archive/2009/12/07/query-transformations-are-syntactic.aspx