Linq-sql

提供:Dev Guides
移動先:案内検索

LINQ-SQL

LINQ to SQLは、リレーショナルデータをオブジェクトとして管理するためのインフラストラクチャ(ランタイム)を提供します。 これは.NET Frameworkのバージョン3.5のコンポーネントであり、オブジェクトモデルの言語統合クエリのSQLへの変換を適切に実行します。 これらのクエリは、実行のためにデータベースに送信されます。 データベースから結果を取得した後、LINQ to SQLは再び結果をオブジェクトに変換します。

LINQ To SQLの紹介

ほとんどのASP.NET開発者にとって、LINQ to SQL(DLINQとも呼ばれます)は、Language Integrated Queryの通電部分です。これにより、通常のLINQ式を使用してSQLサーバーデータベースのデータをクエリできるようになります。 また、データの更新、削除、挿入も可能ですが、唯一の欠点は、SQLサーバーデータベースへの制限です。 ただし、ADO.NETを介したLINQ to SQLには、複雑さの軽減、コーディングの数行など、多くの利点があります。

以下は、LINQ to SQLの実行アーキテクチャを示す図です。

LINQ SQLアーキテクチャ

LINQ to SQLの使用方法

  • ステップ1 *-データベースサーバーとの新しい「データ接続」を作成します。 表示&arrar;サーバーエクスプローラー&arrar;データ接続&arrar;接続を追加

LINQ to SQL

  • ステップ2 *-LINQ To SQLクラスファイルを追加する

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 Provider -クエリをTransact SQL(T-SQL)に変換し、新しいクエリをADO Providerに送信して実行します。
  • * ADOプロバイダー*-クエリの実行後、DataReaderの形式で結果をLINQ to SQLプロバイダーに送信し、SQLプロバイダーはそれをユーザーオブジェクトの形式に変換します。

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のコードをコンパイルして実行すると、次の結果が生成されます-

Emplyee ID = 1, Name = William, Email = [email protected], ContactNo = 999999999
Emplyee ID = 2, Name = Miley, Email = [email protected], ContactNo = 999999999
Emplyee ID = 3, Name = Benjamin, Email = [email protected], ContactNo =

Press any key to continue.