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

Запросы linQtoSql

Запросы LINQ to SQL определяются с помощью синтаксиса, используемого в LINQ. Единственное отличие заключается в том, что объекты, на которые ссылаются запросы, сопоставляются с элементами базы данных.

Технология LINQ to SQL преобразует написанные пользователем запросы в эквивалентные запросы SQL и отправляет их на сервер для обработки. В частности, приложение использует API-интерфейс LINQ to SQL, чтобы запросить выполнение запроса. Затем поставщик LINQ to SQL преобразует запрос в текст SQL и делегирует выполнение поставщику ADO. Поставщик ADO возвращает результаты запроса в виде объекта DataReader. Поставщик LINQ to SQL преобразует результаты ADO в коллекциюIQueryableпользовательских объектов.

На следующем рисунке показана общая схема процесса.

Схема выполнения запроса

Примечание.

Для большинства методов и операторов, основанных на встроенных типах .NET Framework, предусмотрены непосредственные преобразования в команды SQL. Те методы и операторы, которые не могут быть преобразованы технологией LINQ, вызывают исключения во время выполнения. Дополнительные сведения см. в разделе Сопоставление типов SQL и CLR (LINQ to SQL).

Выбор

Выборка (проекция) достигается написанием запроса LINQ на выбранном языке программирования, последующим выполнением этого запроса и получением результатов. LINQ to SQL автоматически преобразует все необходимые операции в привычные операции SQL.

В следующем примере извлекаются названий компаний клиентов из Лондона, которые затем отображаются в окне консоли.

// Northwnd inherits from System.Data.Linq.DataContext.

Northwnd nw = new Northwnd(@"northwnd.mdf");

// or, if you are not using SQL Server Express

// Northwnd nw = new Northwnd("Database=Northwind;Server=server_name;Integrated Security=SSPI");

var companyNameQuery =

from cust in nw.Customers

where cust.City == "London"

select cust.CompanyName;

foreach (var customer in companyNameQuery)

{

Console.WriteLine(customer);

}

Вставка

Для выполнения SQL Insert просто нужно добавить объекты в созданную объектную модель и вызвать метод SubmitChangesвDataContext.

В следующем примере новый клиент и сведения о нем добавляются в таблицу Customers с помощью метода InsertOnSubmit.

// Northwnd inherits from System.Data.Linq.DataContext.

Northwnd nw = new Northwnd(@"northwnd.mdf");

Customer cust = new Customer();

cust.CompanyName = "SomeCompany";

cust.City = "London";

cust.CustomerID = "98128";

cust.PostalCode = "55555";

cust.Phone = "555-555-5555";

nw.Customers.InsertOnSubmit(cust);

// At this point, the new Customer object is added in the object model.

// In LINQ to SQL, the change is not sent to the database until

// SubmitChanges is called.

nw.SubmitChanges();

Обновление

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

В следующем примере извлекаются все клиенты из Лондона. Затем название города меняется с "Лондон" на "Лондон — Метро". Наконец, вызывается метод SubmitChangesдля отправления изменений в базу данных.

Northwnd nw = new Northwnd(@"northwnd.mdf");

var cityNameQuery =

from cust in nw.Customers

where cust.City.Contains("London")

select cust;

foreach (var customer in cityNameQuery)

{

if (customer.City == "London")

{

customer.City = "London - Metro";

}

}

nw.SubmitChanges();