
- •Системы оперативной обработки транзакций
- •Традиционные экспертные системы
- •Информационные хранилища
- •Многомерные базы данных
- •Системы оперативной аналитической обработки данных
- •Трактовка терминов: “Информационно-поисковая система”, “Информационно-справочная система”, ”База знаний”. Понятие поискового образа объекта ипс и связь его с базой данных.
- •Архитектуры приложений баз данных. Локальное приложение. Информационная система с архитектурой “файл - сервер”. Информационная система с архитектурой “клиент-сервер”.
- •Понятие о сервере баз данных. Общие сведения о sql-серверах на примере ms sql Server 2008. Понятие об администрировании сервером. Основные сведения об утилитах администрирования sql-сервером.
- •Архитектура ado.Net.
- •Общие сведения о подключении к данным в Visual Studio.
- •Строки подключения
- •Установка соединения посредством кода в ado.Net
- •Подключения на этапе разработки в обозревателе серверов/обозревателе баз данных
- •Уровни объектной модели ado.Net
- •Хранение данных в наборах данных. Создание набора данных
- •Взаимодействие с базой данных через объект DataSet
- •Общие сведения об адаптере таблиц
- •Общие сведения об объекте DataTableReader
- •Мастер настройки источников данных
- •Конструктор наборов данных
- •Связанные таблицы и объекты DataRelation
- •Заполнение набора данных
- •Редактирование данных в приложении
- •Общие сведения о сохранении данных
- •Представление объекта DataTable
- •Технология linq.
- •Введение в запросы linq.
- •Linq to sql. Создание проекта linq.
- •Linq to sql. Три части операции запроса.
- •Linq to sql. Синтаксис запроса и метода.
- •Linq to DataSet. Общие сведения о linq to DataSet.
- •Linq to DataSet. Запросы к одиночным таблицам.
- •Linq to DataSet. Универсальные методы Field и SetField.
- •Понятие метаданных и способы их представления в структурах данных. Основные сведения о представлении знаний. Сравнительное определение терминов “Знание” и “Информация”.
- •Нелинейные структуры данных. Общие понятия о деревьях.
- •Представление сетевых структур.
- •Методы реализации древовидных и сетевых структур в реляционных субд.
- •Дескрипторная компонента проектной среды поддержки принятия решений в сапр. Реализация дескрипторной компоненты средствами реляционных субд.
- •– 41. Классификационная компонента проектной среды принятия решений в сапр. Обоснование необходимости присутствия классификационной компоненты в информационных системах сапр.
- •Продукционная компонента проектной среды принятия решений в сапр.
- •Компонента структурных объектов проектной среды принятия решений в сапр. Общее понятие о методах реализации структурной компоненты в информационных системах сапр.
- •Представление инженерных знаний в форме информационно-логических таблиц (илт).
- •Справочные таблицы без условий. Реляционное представление справочных таблиц без условий.
- •Справочные таблицы с условиями. Реляционное представление справочных таблиц с условиями.
Linq to sql. Три части операции запроса.
Все операции запроса LINQ состоят из трех различных действий.
1. Получение источника данных.
2. Создание запроса.
3. Выполнение запроса.
В следующем примере показано выражение этих трех частей операции запроса в исходном коде. В примере в качестве источника данных для удобства используется массив целых чисел; тем не менее, те же принципы применимы и к другим источникам данных. Оставшаяся часть раздела ссылается на этот пример.
C#
class IntroToLINQ
{
static void Main()
{
// The Three Parts of a LINQ Query:
// 1. Data source.
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
// 2. Query creation.
// numQuery is an IEnumerable<int>
var numQuery =
from num in numbers
where (num % 2) == 0
select num;
// 3. Query execution.
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
} } }
Источник данных
В предыдущем примере источником данных является массив, поэтому он неявно поддерживает универсальный интерфейс IEnumerable<T>.Это значит, что к нему можно выполнять запросы с LINQ. Запрос выполняется в операторе foreach, и оператору foreach требуется интерфейс IEnumerable или IEnumerable<T>. Типы, которые поддерживают IEnumerable<T> или производные интерфейсы, такие как универсальный интерфейс IQueryable<T>, называются запрашиваемыми типами.
Для запрашиваемого типа, выступающего в качестве источника данных LINQ, не требуются изменения или специальная обработка. Если источник данных еще не находится в памяти в виде запрашиваемого типа, поставщик LINQ должен представить его как таковой. Например, LINQ to XML загружает XML-документ в запрашиваемый тип XElement.
C#
// Create a data source from an XML document.
// using System.Xml.Linq;
XElement contacts = XElement.Load(@"c:\myContactList.xml");
Используя LINQ to SQL, сначала создайте объектно-реляционное сопоставление в режиме разработки вручную либо с помощью Реляционного конструктора объектов. Напишите запросы к объектам, а во время выполнения LINQ to SQL будет осуществлять взаимодействие с базой данных. В следующем примере Customer представляет определенную таблицу в базе данных, а Table<Customer> поддерживает универсальный IQueryable<T>, производный от IEnumerable<T>.
C#
// Create a data source from a SQL Server database.
// using System.Data.Linq;
DataContext db = new DataContext(@"c:\northwind\northwnd.mdf");
Для получения дополнительных сведений о способах создания определенных типов источников данных см. документацию по различным поставщикам LINQ.Основное правило является очень простым: источник данных LINQ - это любой объект, поддерживающий универсальный интерфейс IEnumerable<T> или интерфейс, наследуемый от него.
Примечание Такие типы, как ArrayList, поддерживающие неуниверсальный интерфейс IEnumerable, также могут использоваться в качестве источников данных LINQ. Дополнительные сведения см. в разделе Практическое руководство. Выполнение запроса к ArrayList с помощью LINQ.
Запрос
Запрос указывает, какую информацию нужно извлечь из источника или источников данных. При необходимости, запрос также указывает способ сортировки, группировки и формирования этих сведений перед возвращением. Запрос хранится в переменной запроса и инициализируется выражением запроса. Чтобы упростить написание запросов, в C# появился новый синтаксис запроса.
Запрос из предыдущего примера возвращает все четные числа из массива целых чисел. Выражение запроса содержит три предложения: from, where и select. (Если вы знакомы с SQL, обратите внимание, что порядок предложений противоположен порядку в SQL.) Предложение from указывает источник данных, предложение where применяет фильтр, а предложение select указывает тип возвращаемых элементов. Эти и другие предложения запросов подробно описаны в разделе . Важно, что в LINQ сама переменная запроса не предпринследующем нижеследующем имает действий и не возвращает никаких данных. Она просто хранит сведения, необходимые для предоставления результатов при последующем выполнении запроса. Дополнительные сведения о построении запросов см. в следующем разделе .
Примечание Запросы могут также выражаться с помощью синтаксиса методов. Дополнительные сведения см. в разделе Сравнение синтаксиса запросов LINQ и синтаксиса методов (C#).
Выполнение запроса
Отложенное выполнение
Как уже говорилось ранее, сама переменная запроса только хранит команды запроса. Фактическое выполнение запроса откладывается до выполнения итерации переменной запроса в операторе foreach. Эту концепцию называют отложенным выполнением, она показана в следующем примере.
C#
// Query execution.
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
Оператор foreach является также местом, где извлекаются результаты запроса. Например, в предыдущем запросе переменная итерации num содержит каждое (по очереди) значение в возвращаемой последовательности.
Так как сама переменная запроса никогда не содержит результатов запроса, ее можно выполнять так часто, как необходимо. Например, если база данных непрерывно обновляется отдельным приложением. В приложении можно создать один запрос, получающий последние данные, и его можно выполнять повторно с некоторым интервалом для извлечения каждый раз разных результатов.
Принудительное немедленное выполнение
Запросы, выполняющие статистические функции над диапазоном исходных элементов, должны сначала выполнить итерацию этих элементов. Примерами таких запросов являются Count, Max, Average и First. Они выполняются без явного оператора foreach, поскольку сам запрос должен использовать foreach для возвращения результата. Обратите внимание, что такой тип запросов возвращает одиночное значение, а не коллекцию IEnumerable. Следующий запрос возвращает количество четных чисел в исходном массиве.
C#
var evenNumQuery =
from num in numbers
where (num % 2) == 0
select num;
int evenNumCount = evenNumQuery.Count();
Чтобы принудительно вызвать немедленное выполнение любого запроса и кэшировать его результаты, можно вызвать метод ToList<TSource> или ToArray<TSource>.
C#
List<int> numQuery2 =
(from num in numbers
where (num % 2) == 0
select num).ToList();
// or like this:
// numQuery3 is still an int[]
var numQuery3 =
(from num in numbers
where (num % 2) == 0
select num).ToArray();
Можно также принудительно выполнить запрос, поместив цикл foreach сразу после выражения запроса. Однако вызов ToList или ToArray также кэширует все данные в одной коллекции объектов.