Он возвращает объект анонимного типа с двумя доступными только для чтения свойствами:NameиInStock.Этим свойствам присваиваются наименование товара и состояние его наличия на складе. Благодаря применению анонимного типа необходимость в упоминавшемся выше классеTempотпадает.
Обратите также внимание на циклforeach,в котором выполняется запрос. Теперь переменная шага этого цикла объявляется с помощью ключевого словаvar.Это необходимо потому, что у типа объекта, хранящегося в переменнойinStockList,нет имени. Данная ситуация послужила одной из причин, по которым в C# были внедрены неявно типизированные переменные, поскольку они нужны для поддержки анонимных типов.
Прежде чем продолжить изложение, следует отметить еще один заслуживающий внимания аспект анонимных типов. В некоторых случаях, включая и рассмотренный выше, синтаксис анонимного типа упрощается благодаря применению
select new { item.Name, entry.InStock };
В данном примере имена свойств остаются такими же, как и прежде, а компилятор автоматически "проецирует" идентификаторыNameиInStock,превращая их в свойства анонимного типа. Этим свойствам присваиваются прежние значения, обозначаемыеitem.Nameиentry. InStockсоответственно.
Создание группового объединения
Как пояснялось ранее, операторintoможно использовать вместе с операторомjoinдля создания