Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка приложений баз данных (Visual Studio 2008).docx
Скачиваний:
143
Добавлен:
26.03.2016
Размер:
1.01 Mб
Скачать

Источник данных

В предыдущем примере источником данных является массив, поэтому он неявно поддерживает универсальный интерфейс 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 Query Expressions (C# Programming Guide). Важно, что в LINQ сама переменная запроса не предпринимает действий и не возвращает никаких данных. Она просто хранит сведения, необходимые для предоставления результатов при последующем выполнении запроса. Дополнительные сведения о построении запросов см. в разделеStandard Query Operators Overview.

Примечание

Запросы могут также выражаться с помощью синтаксиса методов. Дополнительные сведения см. в разделе Сравнение синтаксиса запросов LINQ и синтаксиса методов (C#).