Пак Новакова + / LinQЧ12СоловьёвЯрославцева
.docxМИНОБР НАУКИ РОССИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» им. В. И.УЛЬЯНОВА (ЛЕНИНА)» (СПбГЭТУ)
ФАКУЛЬТЕТ КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ И ИНФОРМАТИКИ
КАФЕДРА СИСТЕМ АВТОМАТИЗИРОВАННОГО ПРОЕКТИРОВАНИЯ
ЛАБОРАТОРНАЯ РАБОТА
по учебной дисциплине «Паттерны проектирования приложений»
на тему «Углублённое изучение ООП»
Часть 1-2
«Использование LINQ»
Выполнили:
Соловьёв С.П.
Ярославцева В.А.
Группа: 9301
Факультет: КТИ
Проверил: Новакова Н.Е.
Санкт-Петербург
2012
Цель работы: Научиться пользоваться LINQ и его основными функциями.
Общие сведения:
LINQ (Language-Integrated Query) — это название набора технологий, основанных на интеграции возможностей запроса непосредственно в язык C# (а также в Visual Basic и, возможно, в любые другие языки .NET).
Для разработчиков, создающих запросы, наиболее очевидная "встроенная в язык" часть LINQ — это выражение запросов. При помощи синтаксиса запросов можно выполнять сложные операции фильтрация, упорядочения и группировки в источниках данных, причем для этого требуется крайне небольшой объем кода.
Запрос представляет собой выражение, получающее данные из источника данных. Запросы обычно выражаются на специальном языке запросов.
Подготовка к выполнению лабораторной работы
1. Откройте Visual Studio.
2. Создайте новый проект типа Windows Forms Application с названием OopLabs.Linq.
3. Добавьте в проект файл Artist.cs.
4. Изучите описание класса Album. Класс хранит информацию о музыкальном альбоме:
имя исполнителя, название, дату выхода. Кроме того, определение класса включает
статический метод Album.GetAlbums(), возвращающий список некоторых альбомов
нескольких групп.
Формализация задачи
Рисунок 1.
Упражнение 1 — Вывод списка групп
В упражнении 1 необходимо добавить на главную форму поле (список), куда будут выводиться список исполнителей. Для отображения коллекции нужно использовать функцию LINQ Select().
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace OopLabs.Linq
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
listBox1.DataSource = Album.GetAlbums()
.Select(album => album.Artist)
.Distinct()
.ToList();
}
}
}
Рисунок 2. Список исполнителей
Упражнение 2 — Вывод альбомов для групп
В этом упражнении в форме необходимо создать ещё один список, в который будут выведены альбомы выбранного исполнителя. Для реализации задачи следует использовать функцию LINQ Where.
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace OopLabs.Linq
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
listBox1.DataSource = Album.GetAlbums()
.Select(album => album.Artist)
.Distinct()
.ToList();
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
listBox2.DataSource = Album.GetAlbums()
.Where(album => (listBox1.SelectedItem.ToString() == album.Artist))
.ToList();
}
}
}
Рисунок 3. Список альбомов исполнителя
Рисунок 4. Список альбомов исполнителя
Упражнение 3 — Сортировка списков исполнителей и альбомов
В этом упражнении необходимо сделать так, чтобы альбомы сортировались по дате выхода от более поздних к более ранним. Для выполнения задачи используется функция OrderByDescending(). Так же, используя функцию OrderBy(), необходимо сортировать список исполнителей в алфавитном порядке.
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace OopLabs.Linq
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
listBox1.DataSource = Album.GetAlbums()
.Select(album => album.Artist)
.OrderBy(album =>album)
.Distinct().ToList();
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
listBox2.DataSource = Album.GetAlbums()
.Where(album => (listBox1.SelectedItem.ToString() == album.Artist))
.OrderByDescending(album=>album.Date)
.ToList();
}
}
}
Рисунок 5. Вывод отсортированных исполнителей и альбомов
Вывод: В результате выполнения лабораторной работы мы ознакомились с LINQ и применением его основных команд, таких как запрос информации, вывод списков по определённым критериям и сортировка результатов.
Выполнены три упражнения, по каждому из них представлен листинг программы и результаты её работы.