So sánh tương đối trong linq to sql năm 2024

LINQ [Language-Integrated Query] là ngôn ngữ truy vấn được tích hợp trong các ngôn ngữ lập trình .NET Framework. LINQ cho phép truy vấn dữ liệu, một cách trực tiếp từ mã lập trình, đến các nguồn khác nhau. Nói một cách tương đương, LINQ với các ngôn ngữ .NET cũng như ngôn ngữ SQL với cơ sở dữ liệu quan hệ.

Cú pháp LINQ gần giống ngôn ngữ SQL, nghĩa là cũng có các lệnh như Select, Where, From. Để dễ hình dung hãy xem ví dụ lệnh truy vấn LINQ trong VB dùng để hiển thị danh sách các tác giả [authors] có tên chứa chữ S hoa:

Dim authors As String[] = New String[] {"Hanselman, Scott", "Evjen, Bill",

   "Haack, Phil", "Vieira, Robert", "Spaanjaars, Imar"}
Dim result = From author In authors
         Where author.Contains["S"]
         Order By author
         Select author
For Each author In result
 Label1.Text += author + "
"
Next

C#

using System.Linq; ... string[] authors = new string[] { "Hanselman, Scott", "Evjen, Bill",

          "Haack, Phil", "Vieira, Robert", "Spaanjaars, Imar" };
var result = from author in authors
         where author.Contains["S"]
         orderby author
         select author;
foreach [var author in result] { Label1.Text += author + "
"; }

Kết quả là Scott Hanselman và Imar Spaanjaars.

LINQ là công cụ mạnh mẽ nên nó được tích hợp ở nhiều phần khía cạnh khác nhau trong .NET Framework. Một vài khía cạnh quan trọng:

  • LINQ với các đối tượng [LINQ to Objects]: LINQ cho phép truy vấn đến hầu hết các đối tượng [không chỉ string như ví dụ trên] trong .NET Framework.
  • LINQ với XML [LINQ to XML]: LINQ có thể truy vấn đến dữ liệu XML.
  • LINQ với NET [LINQ to ADO.NET]: làm việc với ADO.NET, LINQ cho phép truy vấn đến DataSet [LINQ to DataSet], chuyển thành các lệnh SQL [LINQ to SQL], và với các thực thể [entities] trong Entity Framework [EF] [LINQ to Entities].

Học LINQ tại đây.

Giới thiệu Entity Framework [EF]

EF là một ORM [Object Relational Mapper – Bộ ánh xạ đối tượng quan hệ] hỗ trợ phát triển các phần mềm ứng dụng hướng dữ liệu.Với EF, chúng ta có thể chuyển các đối tượng cơ sở dữ liệu, như các bảng [tables], thành các đối tượng .NET để chúng ta có thể dùng chúng trong truy vấn hay các ngữ cảnh kết buộc dữ liệu. Bên cạnh đó, EF cũng cho phép chúng ta thiết kế mô hình đối tượng trước rồi sau đó EF sẽ tạo ra cấu trúc dữ liệu cần thiết cho chúng ta. Với EF, chúng ta có thể làm việc dễ dàng với cơ sở dữ liệu mà không viết quá nhiều các dòng mã.

Như đã trình bày ở trên, EF sẽ giúp chúng ta ánh xạ các thành phần của cơ sở dữ liệu như các bảng, cột, quan hệ đến các đối tượng và các thuộc tính trong một mô hình đối tượng trong ứng dụng của chúng ta. VS làm điều này hết sức đơn giản thông qua bài thực hành dưới đây.

Thực hành làm quen LINQ và EF

Trong bài thực hành này chúng ta sẽ tạo một mô hình đối tượng [dùng template ADO.NET Entity Data Model], ánh xạ các bảng Genre, Review từ cơ sở dữ liệu đến mô hình, và cuối cùng là viết vài lệnh LINQ đơn giản.

  • Nhấp chuột phải vào thư mục App_Code, chọn Add > Add New Item chọn ngôn ngữ Visual Basic [hay Visual C#] và chọn template NET Entity Data Model, nhập tên là ngocminhtran, và nhấp Add để thêm vào site

  • Nhấn Next trong hộp thoại Entity Data Model Wizard [mặc định chọn Generate from database] xuất hiện sau đó.
  • Tại bước kế tiếp đảm bảo các lựa chọn sau đây như trong hình:

Nhấp Next.

  • Trong hộp thoại Choose Your Data Objects and Settings, mở rộng Tables và dbo, chọn bảng Genre và Review:

  • Nhấp Finish để thêm mô hình [model] vào site. Nếu có một thông báo Security Warning xuất hiện thì chọn Do not show this message again và nhấn OK. VS sẽ tạo ra một mô hình [ngocminhtran.edmx] như sau:

  • Nếu chúng ta xem trong thư mục App_Code sẽ có tập tin ngocminhtran.edmx và hai tập tin có phần mở rộng là .tt

  • Bên cạnh đó cũng xuất hiện một thư mục Bin [cùng cấp với App_Code] chứa một file dll [một assembly] và một file XML

  • Nhấp vào vị trí bất kỳ trong vùng xám [còn gọi là vùng Entity Designer], nhấn F4 mở cửa sổ Properties thay đổi Code Generation Strategy từ None đến Default

  • Lưu và đóng tập tin edmx. Xoá hai tập tin không cần thiết trong thư mục App_Code là ngocminhtran.context.tt và ngocminhtran.tt.
  • Mở trang All.aspx trong Reviews ở chế độ Design. Kéo một GridView từ Toolbox và thả vào vùng cpMainContent.
  • Nhấp đôi vào vùng xám để đến sự kiện Load của trang [Page_Load] và thêm đoạn mã sau:

C#

protected void Page_Load[object sender, EventArgs e] { using [ngocminhtranEntities myEntities = new ngocminhtranEntities[]] {

var authorizedReviews = from review in myEntities.Reviews  
                        where review.Authorized == true  
                        orderby review.CreateDateTime descending  
                        select review;  
 GridView1.DataSource = authorizedReviews;  
 GridView1.DataBind[];  
} }

ngocminhtranEntities bị lỗi vì đây là lớp trong namespace ngocminhtranModel nên chỉ cần imports [hay using trong C#] nó là xong:

  • Lưu tất cả và đóng aspx.vb. Mở trang All.aspx và Ctrl+F5

Sử dụng truy vấn LINQ với các server controls

Trong bài thực hành trên, chúng ta đã lấy dữ liệu từ các truy vấn LINQ và gán đến các controls bằng thuộc tính DataSource và phương thức DataBind[]. Cách thức này có một vài bất tiện. Thứ nhất, phương thức DataBind[] không hỗ trợ chỉnh sửa, cập nhật, hay xoá dữ liệu một cách trực tiếp. Thứ hai, chúng ta định nghĩa data source trong Code Behind [trang aspx.vb] nên GridView không biết dữ liệu của chúng ta cho đến khi thực thi và vì vậy, chúng ta sẽ không có công cụ để tạo các cột cho GridView. Các bất tiện này có thể được khắc phục thông qua các server controls là ListView và EntityDataSource.

Sử dụng data controls với Entity Framework [EF]

Trong chương XII chúng ta đã làm quen với các data controls gồm GridView và SqlDataSource. Trong phần này chúng ta sẽ tìm hiểu thêm các data controls sau:

Control Mô tả EntityDataSource Là chiếc cầu nối giữa nguồn dữ liệu [trong trường hợp này là EF] và data controls. ListView Cung cấp một giao diện trực quan mẫu cho phép thêm, xoá, sửa dữ liệu trong một cơ sở dữ liệu, cung cấp các dịch vụ CRUD. DataPager Sử dụng kết hợp với ListView cho phép phân trang dữ liệu thành từng nhóm hàng thay vì hiển thị tất cả các hàng cùng một lúc.

EntityDataSource control

EntityDataSource là chiếc cầu nối giữa Entity Framework và data control [ví dụ như ListView hay GridView]. Nó bao gồm các thuộc tính sau:

Thuộc tính Mô tả EnableInsert

EnableDelete

EnableUpdate

Cho phép các data control [như GridView hay ListView] thực hiện chức năng thêm, xoá, hay chỉnh sửa dữ liệu. ContextTypeName Tên của lớp ObjectContext mà data control sẽ dùng. EntitySetName Tên của tập entity từ mô hình EF mà chúng ta muốn dùng, ví dụ Reviews hay Genres. Select

OrderBy

Where

Cho phép định nghĩa truy vấn để EntityDataSource kích hoạt đến mô hình EF.

Cùng với các data control, EntityDataSource cung cấp cách thức truy cập đến cơ sở dữ liệu SQL Server thông qua LINQ to Entities.

Một ứng dụng đơn giản với EntityDataSource

Trong bài thực hành này, chúng ta sẽ cho phép người dùng chọn một album bất kỳ từ danh sách [drop-down list] và xem tất các hình ảnh đã được phân trang từ album.

Chủ Đề