Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Турчин Д.Е. - Архитектура ИС. Практикум 2014 (И...doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
5.42 Mб
Скачать

7.2.2. Анонимные типы. Расширяющие методы Анонимные типы. Расширяющие методы.

В языке C# одним из средств, непосредственно связанных с LINQ, являются анонимные типы. Как следует из названия, анонимный тип представляет собой класс, не имеющий имени. Его основное назначение состоит в создании объекта, возвращаемого оператором select.

Благодаря анонимным типам в ряде случаев отпадает необходимость объявлять класс, который предназначен только для хранения результата запроса.

Анонимный тип объявляется с помощью следующей общей формы:

new { имя_А = значение_А, имя_В = значение_В, ... }

Расширяющий метод представляет собой статический метод, который может быть связан с классом так, что он может быть вызван, как метод экземпляра этого класса. Расширяющие методы дают возможность использовать метод с классом, который не предоставляет его изначально.

Для того чтобы поменять порядок элементов в результирующем наборе на обратный используется расширяющий метод Reverse<T>() класса Enumerable.

Для вычисления одного значения из коллекции значений используются статистические операции. К основным статистическим операциям LINQ относятся:

Average – вычисляет среднее арифметическое значение в коллекции;

Count – подсчитывает число элементов в коллекции (при необходимости только те элементы, которые удовлетворяют заданному условию);

Max – определяет максимальное значение в коллекции;

Min – определяет минимальное значение в коллекции;

Sum – вычисляет сумму значений в коллекции.

Пример 7.1. Выполнение запросов LINQ к массиву объектов с помощью консольного приложения на языке C#.

Требуется разработать набор запросов LINQ к массиву объектов, каждый из которых содержат данные о продуктовом товаре (наименование, производитель, количество единиц, вес одной единицы, цена, код стеллажа), хранимом на складе. Группы товаров размещаются на стеллажах (код, число ярусов, максимальная грузонесущая способность).

Исходный код на языке C# для класса Product, описывающего продуктовый товар, представлен в листинге 7.1, а код класса Store (стеллаж) – в листинге 7.2.

Листинг 7.1. Исходный код класса Product

Листинг 7.2. Исходный код класса Store

Требуется разработать следующие запросы:

  1. Данные о всех товарах.

  2. Наименования всех товаров в алфавитном порядке.

  3. Товары с количеством более 50 шт.

  4. Товары фирмы «Алтайпродукт» с ценой менее 80 руб.

  5. Число наименований товаров весом от 250 до 500 г.

  6. Наименования товаров и их количество в порядке убывания количества.

  7. Средняя, наибольшая и наименьшая цены товаров фирмы «Алтайпродукт».

  8. Суммарный вес всех товаров на складе.

  9. Общая стоимость товаров каждого наименования.

  10. Наименования товаров, сгруппированные по производителям (используется операция group).

  11. Наименование и количество товара с указанием данных о стеллаже, на котором он хранится (используется операция join).

Данные о товарах организуем в виде массива itemsInStock, состоящего из объектов класса Product. Массив itemsInStock будет объявлен в методе Main() (листинг 7.3) консольного приложения. Также в методе Main() производится вызов методов, выполняющих запросы LINQ.

Исходный код методов, которые содержат выражения запроса LINQ и выполняют их обработку, представлен в листингах 7.4, 7.5 и 7.6.

Листинг 7.3. Исходный код класса Program консольного приложения

Листинг 7.4. Исходный код методов, выполняющих запросы LINQ (часть 1)

Листинг 7.5. Исходный код методов, выполняющих запросы LINQ (часть 2)

Листинг 7.6. Исходный код методов, выполняющих запросы LINQ (часть 3)

Листинг 7.7. Исходный код методов, выполняющих запросы LINQ (часть 4)

Результат работы полученного консольного приложения показан на рис. 7.1. ❒

Рис. 7.1. Результат работы консольного приложения