Практическое выполнение Работа с коллекциями - LINQ to object В среде MS Visual Studio создать консольное приложение на языке С#. Определить и инициализировать коллекцию (список строк). Используя технологию linq to objects выполнить набор запросов (через точечный синтаксис и запросом).
Открыть Visual Studio.
Создать новый проект (консольный).
Указать тип Visual C# - Windows – Console Application и имя проекта, нажать ОК.
Далее в коде функции Main ввести код программы.И затем запустить программу на выполнение.
Команда вывода данных (1-й параметр – строка вывода, остальные подставляются через фигурные скобки):
Console.WriteLine(" Test - {0} {1}", "Hello!", 123);
Команда ввода:
Console.ReadKey();
Общий код:
static void Main(string[] args)
{
Console.WriteLine(" Test - {0} {1}", "Hello!", 123);
Console.ReadKey();
}
результат:
Работа с базой данных - linq to sql Открыть MS Visual Studio
Создать проект
Указать его имя и тип.
Контекст БД DataContext
DataContext - это класс, устанавливающий соединение с базой данных. Он также предоставляет несколько служб, обеспечивающих отслеживание идентичности, отслеживание изменении и обработку этих изменений.
DataContext — это класс, соединяющий с базой данных, отслеживающий то, что мы изменяем, и обновляющий базу данных при вызове метода SubmitChanges. В LINQ to SQL принято использовать класс, производный от DataContext. Имя производного класса обычно совпадает с именем базы данных, на которую он отображается.
Добавить к проекту класс
И указать его тип – LINQ to SQL
Откроется окно конструктора
Вызвать Server Explorer (из меню Вид) для просмотра объектов БД (соединения с БД)
Выбрать нужное соединение (или создать новое) и в нем открыть БД и ее объекты
Вызвать Server Explorer (из меню Вид) для просмотра объектов БД (соединения с БД)
Перетащить из Server Explorer таблицы, функции и процедуры в окно конструктора.
Открыть окно проекции БД в класс контекста двойным щелчком по названию класса в Solution Erplorer.
Название класса контекста было указано при его создании (по умолчанию DataClasses1).
Откроется код класса контекста, в котором можно посмотреть названия классов и объектов таблиц и их полей.
Обращение к БД из программы
Добавить в проект ссылку на библиотеку
Из контекстного меню решения (проекта) выбрать Add Reference
В проекте перейти к редактированию экранной формы (двойным щелчком по ее названию в Solution Explorer). Поместить на нее таблицу И кнопку.
Для работы с БД создать контекст (переменная БД и ее инициализация при открытии формы)
LINQ to SQL подразумевает использование сущностных классов, причем каждый из них обычно отображается на единственную таблицу базы данных. Таким образом, мы имеем сущностные классы, отображенные на таблицы базы данных, и свойства сущностных классов, отображенные на столбцы этих таблиц. Это отображение “класс-таблица" и “свойство-столбец” являются сутью LINQ to SQL.
Обращение к таблице Двойным щелчком по кнопке (в редакторе формы) перейти к коду ее обработчика и написать код заполнения таблицы данными из БД:
Обращение таблице через контекст :
Источник данных таблицы = Контекст.таблица
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
public DataClasses1DataContext db;
public Form1()
{
InitializeComponent();
db=new DataClasses1DataContext();
} private void button1_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = db.persons;
}
}
}
Запустить проект и проверить работу.
Добавить кнопки и в обработчике каждой указать запрос на извлечение данных (формат Linq в точечной нотации, в качестве коллекции указать таблицу).
Вывод в таблицу результата выполнения запроса.
Вызов процедуры или функции:
Обращение через контекст:
Контекст.процедура(параметры)
Вызов хранимых процедур и функций БД происходит через обращение к одноименным методам объекта-контекста. Типы входных и выходных параметров соответствуют объявленным в БД.
Скалярная функция возвращает одно значение, которое присваивается переменной.
Табличная – коллекцию (ее можно присвоить источнику данных или обработать в цикле).
Процедура – 1 значение, коллекцию или ничего ( в зависимости от конкретной ситуации).
Редактирование таблицы
Добавление объекта в таблицу Создать объект через new,
Присвоить значения его полям,
Добавить через контекст в таблицу,
Сохранить изменения контекста в БД.
Удаление Открыть объект через запрос к таблице БД,
Выбрать из результата запроса конкретный объект,
Удалить объект из таблицы через контекст,
Сохранить изменения контекста в БД.
Изменение Открыть объект через запрос к таблице БД,
Выбрать из результата запроса конкретный объект (функция Single() обеспечивает извлечение одного объекта, а не коллекции),
Изменить значения полей объекта
Сохранить изменения контекста в БД.
Работа со связанными таблицами
В запросах к связанным таблицам можно переходить по связям 1-М в обоих направлениях.
Например, таблицы Builders и Road связаны М-1.
В запросе к Builders можно использовать поля road (значение внешнего ключа) и road1(ссылка на связанный объект в другой таблице):
dataGridView1.DataSource = from b in db.builders
where b.road1.src=="СПб"
select new { b.title, b.road, b.road1.id,
b.road1.src, b.road1.dest,
b.road1.type, b.road1.cost };
Из запроса к Road можно использовать поле builders (множество объектов в связанной таблице), например (выбрать дороги, которые строила компания CMYххх)
dataGridView1.DataSource = from r in db.roads
where r.builders.Count()>0 && r.builders.Any(x=>x.title.Contains("CMY"))
orderby r.src,r.dest
select new {r.src,r.dest,r.type,r.id,
t = r.builders.First(x => x.title.Contains("CMY")).title,
r.builders.Count };
Пример задания 1. Работа с коллекциями - LINQ to obiect
В среде MS Visual Studio создать консольное приложение на языке С#. Определить и инициализировать коллекцию (список строк). Используя технологию linq to objects выполнить набор запросов (через точечный синтаксис и запросом):
строки, содержащие подстроку,
отсортированные строки,
(точечный синтаксис) количество строк, являющихся уникальными,
группировка строк длиной 3 символа по первой букве. В результат — первая буква строки, количество строк в группе (генерация объектов «на лету»).
Результат отобразить на экране.
2. Работа с базой данных - linq to sql
2.1. Создать БД
В среде MS SQL Server Management Studio создать БД lab6_91 (или использовать созданную ранее) и добавить в нее таблицы
"Hotel"(отель), содержит свойства:
hname - название – строковое varchar(10), (КЛЮЧ),
hcity – город – строковое varchar(15),
stars – количество звезд – целое.
"Client" (клиент), содержит свойства:
fio - ФИО – строковое, varchar(50),
num - номер – целое,
ofhotel — отель — varchar(10),(ВНЕШНИЙ КЛЮЧ)
id - идентификатор (КЛЮЧ - PK) – целое, автоинкремент.
Открыть таблицы на редактирование и заполнить тестовыми данными.
2.2. Создать windows приложение на языке С#. Настроить соединение с созданной ранее (в п.1) БД. Подключить все таблицы. Создать форму, содержащую таблицы, набор полей и кнопок. Определить элементы и действия:
Отобразить отели в таблицу.
Продемонстрировать добавление, удаление и редактирование отеля.
Продемонстрировать запросы с фильтром (вывод в таблицы через дополнительные кнопки):
Отели 5 звезд,
Клиенты отелей Москвы,
Отели с двумя и более клиентами (отель, город, количество клиентов).
Использовать точечный синтаксис и методы коллекций.
Продемонстрировать работу приложения.
3. Работа с xml-документов - linq to XML
3.1. Создать xml-документ
К предыдущему приложению добавить кнопку, по которой формируется xml-документ на основе таблиц БД вида:
название Петров
Иванов
….
……..
……
3.2. Запросы к xml-документу
Создать консольное или windows приложение на языке С#. Открыть xml-документ. Выполнить ряд запросов (отображение записей по условию, создание, изменение и удаление элементов и атрибутов):
по указанному отелю список его клиентов,
добавление, удаление и редактирование клиента отеля,
города и количество отелей в каждом.
Продемонстрировать работу приложения.
Требования к отчету Титульный лист
Задание на выполнение
Исходный код создания объектов БД (SQL)
Исходный код приложения для работы с LINQ
Скриншоты с результатами выполнения команд
Вопросы для самопроверки: Каковы назначение и возможности языка linq?
Отличия linq to objects, sql, xml ?
Как на языке linq создавать запросы с сортировкой?
Как на языке linq создавать запросы с условием?
Как на языке linq создавать запросы группировкой?
Другие конструкции языка.
Запросы с точечным синтаксисом и в формате запроса.
LINQ to SQL. Соединение с БД, обращение к таблицам. Переход по связям.
LINQ to SQL. Создание, удаление и изменение записей таблицы.
LINQ to SQL. Соединение с БД, обращение к процедурам и функциям.
LINQ to XML. Создание, удаление и изменение элементов и атрибутов.
LINQ to XML. Запросы к документу.
Литература Джозеф с. Раттц - мл. LINQ. Язык интегрированных запросов в C# 2008 для профессионалов. - Издательский дом Вильямс. - 2008 г.
Основы программирования на C#. - Электронный ресурс [http://www.intuit.ru]
Э. Троелсен. Язык программирования C#2010 и платформа .NET 4.0.
|