Учебники

LINQ — SQL

LINQ to SQL предлагает инфраструктуру (во время выполнения) для управления реляционными данными как объектами. Он является компонентом версии 3.5 .NET Framework и успешно выполняет перевод языковых запросов объектной модели на SQL. Эти запросы затем отправляются в базу данных с целью выполнения. После получения результатов из базы данных LINQ to SQL снова переводит их в объекты.

Введение в LINQ To SQL

Для большинства разработчиков ASP.NET LINQ to SQL (также известный как DLINQ) является электрифицирующей частью Language Integrated Query, поскольку это позволяет запрашивать данные в базе данных SQL-сервера с использованием обычных выражений LINQ. Он также позволяет обновлять, удалять и вставлять данные, но единственным недостатком, от которого он страдает, является его ограничение базой данных SQL-сервера. Однако есть много преимуществ LINQ to SQL по сравнению с ADO.NET, таких как уменьшенная сложность, несколько строк кода и многое другое.

Ниже приведена схема, показывающая архитектуру исполнения LINQ to SQL.

Архитектура LINQ SQL

Как использовать LINQ to SQL?

Шаг 1 — Создайте новое «соединение данных» с сервером базы данных. Просмотр & arrar; Обозреватель серверов & arrar; Data Connections & arrar; Добавить соединение

LINQ to SQL

Шаг 2 — Добавить LINQ To SQL class file

LINQ to SQL

Шаг 3 — Выберите таблицы из базы данных и перетащите их в новый файл класса LINQ to SQL.

LINQ to SQL

Шаг 4 — Добавлены таблицы в файл класса.

LINQ to SQL

Запросы с помощью LINQ to SQL

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

  • LINQ to SQL API — запрашивает выполнение запроса от имени приложения и отправляет его в LINQ to SQL Provider.

  • Поставщик LINQ to SQL — преобразует запрос в Transact SQL (T-SQL) и отправляет новый запрос поставщику ADO для выполнения.

  • ADO Provider — после выполнения запроса отправьте результаты в виде DataReader в LINQ to SQL Provider, который, в свою очередь, преобразует его в форму пользовательского объекта.

LINQ to SQL API — запрашивает выполнение запроса от имени приложения и отправляет его в LINQ to SQL Provider.

Поставщик LINQ to SQL — преобразует запрос в Transact SQL (T-SQL) и отправляет новый запрос поставщику ADO для выполнения.

ADO Provider — после выполнения запроса отправьте результаты в виде DataReader в LINQ to SQL Provider, который, в свою очередь, преобразует его в форму пользовательского объекта.

Следует отметить, что перед выполнением запроса LINQ to SQL крайне важно подключиться к источнику данных через класс DataContext.

Вставить, обновить и удалить с помощью LINQ To SQL

Добавить ИЛИ Вставить

C #

using System;
using System.Linq;

namespace LINQtoSQL {
   class LinqToSQLCRUD {
      static void Main(string[] args) {
      
         string connectString = System.Configuration.ConfigurationManager.ConnectionStrings["LinqToSQLDBConnectionString"].ToString();

         LinqToSQLDataContext db = new LinqToSQLDataContext(connectString);           

         //Create new Employee
		 
         Employee newEmployee = new Employee();
         newEmployee.Name = "Michael";
         newEmployee.Email = "[email protected]";
         newEmployee.ContactNo = "343434343";
         newEmployee.DepartmentId = 3;
         newEmployee.Address = "Michael - USA";

         //Add new Employee to database
         db.Employees.InsertOnSubmit(newEmployee);

         //Save changes to Database.
         db.SubmitChanges();

         //Get new Inserted Employee            
         Employee insertedEmployee = db.Employees.FirstOrDefault(e e.Name.Equals("Michael"));

         Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3}, Address = {4}",
                          insertedEmployee.EmployeeId, insertedEmployee.Name, insertedEmployee.Email, 
                          insertedEmployee.ContactNo, insertedEmployee.Address);

         Console.WriteLine("\nPress any key to continue.");
         Console.ReadKey();
      }
   }
}

VB

Module Module1

   Sub Main()
   
      Dim connectString As String = System.Configuration.ConfigurationManager.ConnectionStrings("LinqToSQLDBConnectionString").ToString()

      Dim db As New LinqToSQLDataContext(connectString)

      Dim newEmployee As New Employee()
	  
      newEmployee.Name = "Michael"
      newEmployee.Email = "[email protected]"
      newEmployee.ContactNo = "343434343"
      newEmployee.DepartmentId = 3
      newEmployee.Address = "Michael - USA"
     
      db.Employees.InsertOnSubmit(newEmployee)
     
      db.SubmitChanges()
     
      Dim insertedEmployee As Employee = db.Employees.FirstOrDefault(Function(e) e.Name.Equals("Michael"))

      Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3}, 
         Address = {4}", insertedEmployee.EmployeeId, insertedEmployee.Name,
         insertedEmployee.Email, insertedEmployee.ContactNo, insertedEmployee.Address)

      Console.WriteLine(vbLf & "Press any key to continue.")
      Console.ReadKey()
	 
   End Sub
  
End Module

Когда вышеуказанный код C # или VB компилируется и запускается, он дает следующий результат —

Emplyee ID = 4, Name = Michael, Email = [email protected], ContactNo = 
343434343, Address = Michael - USA

Press any key to continue.

Обновить

C #

using System;
using System.Linq;

namespace LINQtoSQL {
   class LinqToSQLCRUD {
      static void Main(string[] args) {
      
         string connectString = System.Configuration.ConfigurationManager.ConnectionStrings["LinqToSQLDBConnectionString"].ToString();

         LinqToSQLDataContext db = new LinqToSQLDataContext(connectString);

         //Get Employee for update
         Employee employee = db.Employees.FirstOrDefault(e =>e.Name.Equals("Michael"));

         employee.Name = "George Michael";
         employee.Email = "[email protected]";
         employee.ContactNo = "99999999";
         employee.DepartmentId = 2;
         employee.Address = "Michael George - UK";

         //Save changes to Database.
         db.SubmitChanges();

         //Get Updated Employee            
         Employee updatedEmployee = db.Employees.FirstOrDefault(e e.Name.Equals("George Michael"));

         Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3}, Address = {4}",
                          updatedEmployee.EmployeeId, updatedEmployee.Name, updatedEmployee.Email, 
                          updatedEmployee.ContactNo, updatedEmployee.Address);

         Console.WriteLine("\nPress any key to continue.");
         Console.ReadKey();
      }
   }
}

VB

Module Module1

   Sub Main()
  
      Dim connectString As String = System.Configuration.ConfigurationManager.ConnectionStrings("LinqToSQLDBConnectionString").ToString()

      Dim db As New LinqToSQLDataContext(connectString)

      Dim employee As Employee = db.Employees.FirstOrDefault(Function(e) e.Name.Equals("Michael"))

      employee.Name = "George Michael"
      employee.Email = "[email protected]"
      employee.ContactNo = "99999999"
      employee.DepartmentId = 2
      employee.Address = "Michael George - UK"

      db.SubmitChanges()
          
      Dim updatedEmployee As Employee = db.Employees.FirstOrDefault(Function(e) e.Name.Equals("George Michael"))

      Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3},
         Address = {4}", updatedEmployee.EmployeeId, updatedEmployee.Name, 
         updatedEmployee.Email, updatedEmployee.ContactNo, updatedEmployee.Address)

      Console.WriteLine(vbLf & "Press any key to continue.")
      Console.ReadKey()
	  
   End Sub
   
End Module

Когда приведенный выше код C # или Vb компилируется и запускается, он дает следующий результат:

Emplyee ID = 4, Name = George Michael, Email = [email protected], ContactNo = 
999999999, Address = Michael George - UK

Press any key to continue.

удалять

C #

using System;
using System.Linq;

namespace LINQtoSQL {
   class LinqToSQLCRUD {
      static void Main(string[] args) {
      
         string connectString = System.Configuration.ConfigurationManager.ConnectionStrings["LinqToSQLDBConnectionString"].ToString();

         LinqToSQLDataContext db = newLinqToSQLDataContext(connectString);

         //Get Employee to Delete
         Employee deleteEmployee = db.Employees.FirstOrDefault(e e.Name.Equals("George Michael"));

         //Delete Employee
         db.Employees.DeleteOnSubmit(deleteEmployee);

         //Save changes to Database.
         db.SubmitChanges();

         //Get All Employee from Database
         var employeeList = db.Employees;
         foreach (Employee employee in employeeList) {
            Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3}",
               employee.EmployeeId, employee.Name, employee.Email, employee.ContactNo);
         }            

         Console.WriteLine("\nPress any key to continue.");
         Console.ReadKey();
      }
   }
}

VB

Module Module1

   Sub Main()
   
      Dim connectString As String = System.Configuration.ConfigurationManager.ConnectionStrings("LinqToSQLDBConnectionString").ToString()

      Dim db As New LinqToSQLDataContext(connectString)

      Dim deleteEmployee As Employee = db.Employees.FirstOrDefault(Function(e) e.Name.Equals("George Michael"))

      db.Employees.DeleteOnSubmit(deleteEmployee)

      db.SubmitChanges()

      Dim employeeList = db.Employees
	  
      For Each employee As Employee In employeeList
         Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3}",
            employee.EmployeeId, employee.Name, employee.Email, employee.ContactNo)
      Next 

      Console.WriteLine(vbLf & "Press any key to continue.")
      Console.ReadKey()
   End Sub
   
End Module

Когда вышеуказанный код C # или VB компилируется и запускается, он дает следующий результат —