New InStockStatus(1424, true),



New InStockStatus(7892, false),

New InStockStatus(8534, true),

New InStockStatus (6411, true)

};

 

Сформировать запрос, объединяющий объекты классов Item и

InStockStatus для составления списка наименований товаров и их

Наличия на складе. Теперь для этой цели используется анонимный тип.

var inStockList = from item in items

Join entry in statusList

On item.ItemNumber equals entry.ItemNumber

select new { Name = item.Name,

InStock = entry.InStock };

 

Console.WriteLine ("Товар\tНаличие\n") ;

Выполнить запрос и вывести его результаты,

Foreach(var t in inStockList)

Console.WriteLine("{0}\t{1}", t.Name, t.InStock);

}

}

 

Обратите особое внимание на следующий оператор select.

 

select new { Name = item.Name,

InStock = entry.InStock };

 

Он возвращает объект анонимного типа с двумя доступными только для чтения свойствами: Name и InStock. Этим свойствам присваиваются наименование товара и состояние его наличия на складе. Благодаря применению анонимного типа необходимость в упоминавшемся выше классе Temp отпадает.

Обратите также внимание на цикл foreach, в котором выполняется запрос. Теперь переменная шага этого цикла объявляется с помощью ключевого слова var. Это необходимо потому, что у типа объекта, хранящегося в переменной inStockList, нет имени. Данная ситуация послужила одной из причин, по которым в C# были внедрены неявно типизированные переменные, поскольку они нужны для поддержки анонимных типов.

Прежде чем продолжить изложение, следует отметить еще один заслуживающий внимания аспект анонимных типов. В некоторых случаях, включая и рассмотренный выше, синтаксис анонимного типа упрощается благодаря применению инициализатора проекции. В данном случае просто указывается имя самого инициализатора. Это имя автоматически становится именем свойства. В качестве примера ниже приведен другой вариант оператора select из предыдущей программы.

 

select new { item.Name, entry.InStock };

 

В данном примере имена свойств остаются такими же, как и прежде, а компилятор автоматически "проецирует" идентификаторы Name и InStock, превращая их в свойства анонимного типа. Этим свойствам присваиваются прежние значения, обозначаемые item.Name и entry.InStock соответственно.

 

 

Создание группового объединения

 

Как пояснялось ранее, оператор into можно использовать вместе с оператором join для создания группового объединения , образующего последовательность, в которой каждый результат состоит из элементов данных из первой последовательности и группы всех совпадающих элементов из второй последовательности. Примеры группового объединения не приводились выше потому, что в этом объединении нередко применяется анонимный тип. Но теперь, когда представлены анонимные типы, можно обратиться к простому примеру группового объединения.

В приведенном ниже примере программы групповое объединение используется для составления списка, в котором различные транспортные средства (автомашины, суда и самолеты) организованы по общим для них категориям транспорта: наземного, морского, воздушного и речного. В этой программе сначала создается класс Transport, связывающий вид транспорта с его классификацией. Затем в методе Main() формируются две входные последовательности. Первая из них представляет собой массив символьных строк, содержащих названия общих категорий транспорта: наземного, морского, воздушного и речного, а вторая — массив объектов типа Transport, инкапсулирующих различные транспортные средства. Полученное в итоге групповое объединение используется для составления списка транспортных средств, организованных по соответствующим категориям.

 

// Продемонстрировать применение простого группового объединения.

using System;

using System.Linq;

 

// Этот класс связывает наименование вида транспорта,

// например поезда, с общей классификацией транспорта:

// наземного, морского, воздушного или речного,

class Transport {

public string Name { get; set; }

public string How { get; set; }

 

public Transport(string n, string h) {

Name = n;

How = h;

}

}

 

class GroupJoinDemo {

static void Main() {


Дата добавления: 2019-02-12; просмотров: 322; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!