Tải bản đầy đủ

Tìm hiểu công nghệ LinQ và ứng dụng minh họa

TRƯỜNG ĐH SƯ PHẠM TP. HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN




 


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

LỜI NÓI ĐẦU

C

ông nghệ. NET là một trong những lĩnh vực môn nghiên cứu lập trình máy
tính, Qua môn học này, sẽ giúp chúng em hiểu được kiến trúc, phạm vi ứng
dụng đặc trưng của công nghệ NET. Hiểu được tính năng , ưu nhược của các công
nghệ hiện đại trong.NET phiên bản mới như WPF, LINQ, Silver light. Từ cái nhìn

tổng quan nay, sẽ giúp sinh viên định hướng ứng dụng công nghệ mình thích vào
trong lập trình, mục tiên nâng cao trình độ lập trình, tạo ra những ứng dụng mang
tính thực thi.
Chính vì vậy, chúng em đã chọn đề tài “ Tìm hiểu về LINQ”. Các thành viên của
nhóm đã cố gắng học, tìm tài liệu, lắng nghe sự chỉ bảo tận tình của thầy trong các
buổi học. Do sự hiểu biết kiến thức chưa sâu về bộ môn, chắc chắn đề tài của
nhóm vẫn còn nhiều thiết sót. Vì vậy, mong thầy xem xét lượng thứ, và đóng góp
ý kiến để chúng em ý thức hơn và rút kinh nghiệm cho các đề tài sau này.
Cuối cùng, chúng em chân thành cám ơn thầy đã tạo cơ hội cho nhóm thực hiện đề
tài.

MỤC LỤC
PHẦN 1 : TÌM HIỂU VỀ LINQ
I. LINQ
Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

2


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

1. Khái niệm.....................................................................................5
2. Mô hình kiến trúc LINQ:.............................................................6
3. Cú pháp truy vấn( Query Syntax) và cú pháp phương thức( Method
Syntax).........................................................................................6
4. Cấu trúc của biểu thức truy vấn:..................................................7

II. LINQ TO SQL
III. Mô hình hóa CSDL dùng LINQ TO SQL
IV. Truy vấn LINQ TO SQL
1. Tìm hiểu lớp DataContext..........................................................10
2. Form Quản Lý Nhân Viên và minh họa cho thêm, xóa, sửa.......10
3. Lựa chọn( Select).......................................................................12
4. Cách chèn hàng vào trong CSDL( LINQ TO SQL)...................13


5. Cách cập nhật hàng trong CSDL( LINQ TO SQL)....................14
6. Cách xóa 1 hàng trong CSDL( LINQ TO SQL).........................15
7. Từ khóa Var................................................................................16
8. Filtering(Lọc).............................................................................16
9. Ordering(Thứ tự)........................................................................17
10.................................................................... Grouping(Gom nhóm)
...................................................................................................17

11......................................................... Kết hợp nhiều yếu tố đầu vào
...................................................................................................18

12............................. Lựa chọn 1 tập hợp con của mỗi phần tử nguồn
...................................................................................................20

13.......................................................................... Biểu thức Lambda
...................................................................................................21

14............................... Giới thiệu 1 định danh bằng cách sử dụng Let
...................................................................................................21

15................................................... Chuyển đổi trong mệnh đề Select
...................................................................................................22

16................................................................................... Từ khóa Join
...................................................................................................22
Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

3


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

V. Cách kết nối một cơ sở dữ liệu (LINQ to SQL)
1. Cách tạo cơ sở dữ liệu (LINQ to SQL)......................................25
2. Cách xóa CSDL:........................................................................25

VI. LINQ to DataSet
VII. Lấy dữ liệu dùng Stored Procedure
1. Các bước ánh xạ và gọi SPROC dùng LINQ to SQL.................29
2. Cách ánh xạ một SPROC vào một DataContext của LINQ........29
3. Cách gọi SPROC mới được tạo:.................................................31
4. Cách sử dụng SPROC để thực hiện Insert/Update/Delete:.........32
5. Ví dụ Thêm một Order bằng cách dùng SPROC:.......................32

I.
II.
III.
IV.
V.
VI.
VII.

PHẦN 2 : ỨNG DỤNG QUẢN LÝ THƯ VIỆN
Bài toán quản lý thư viện....................................................................37
Phát hiện thực thể - Sơ đồ Use Case ...........................................38
Một số quy trình............................................................................41
Tạo cơ sở dữ liệu (PDM)..............................................................43
Thiết kế menu................................................................................44
Thiết kế màn hình..........................................................................46
Cài đặt ...........................................................................................47

VIII. Minh họa linq với một From cụ thể .............................................50
IX. Hướng dẫn demo chương trình....................................................57

PHẦN 3 : ĐÁNH GIÁ ƯU KHUYẾT
I. Ưu điểm..........................................................................................60
II. Khuyết điểm ..................................................................................60
III. Hướng phát triển tương lai ..........................................................60

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

4


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

Kết luận – Tài liệu tham khảo

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

5


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

PHẦN 1 : TÌM HIỂU VỀ LINQ
I. LINQ
1. Khái niệm
LINQ là một tính năng mới của C # và NET Visual Basic tích hợp vào các
ngôn ngữ này khả năng truy vấn dữ liệu. Trong một hệ thống cơ sở dữ
liệu quan hệ, dữ liệu được tổ chức vào bảng bình thường hóa độc đáo,

truy cập với một ngôn ngữ truy vấn rất đơn giản nhưng mạnh mẽ như
SQL.
Trong một chương trình, như trái ngược với một cơ sở dữ liệu, tuy nhiên, dữ
liệu được lưu trữ trong các đối tượng lớp hoặc cấu trúc
mà là tất cả rất khác nhau. Kết quả là, đã có không có ngôn ngữ truy
vấn
chung
để
lấy
dữ liệu từ cấu trúc dữ liệu. Phương pháp lấy dữ liệu từ các đối tượng đã
luôn
luôn
được
tùy
chỉnh
được thiết kế như là một phần của chương trình. Với sự ra đời của
LINQ trong C # 3.0, tuy nhiên, khả năng để truy vấn các bộ sưu tập của
các đối tượng đã được thêm vào ngôn ngữ. Sau đây là những đặc điểm
quan trọng của LINQ:
• LINQ là viết tắt của Language Integrated Query.
• LINQ là một mở rộng của NET Framework cho phép bạn truy vấn bộ sưu
tập dữ liệu trong một cách tương tự như truy vấn cơ sở dữ liệu.
• C # 3.0 bao gồm các phần mở rộng tích hợp LINQ vào ngôn ngữ, cho phép
bạn truy vấn dữ liệu từ cơ sở dữ liệu, bộ sưu tập của các đối tượng chương
trình, và các tài liệu XML.
Đoạn lệnh sau đây cho thấy một ví dụ đơn giản của việc sử dụng LINQ.

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

6


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

2. Mô hình kiến trúc LINQ

3. Cú pháp truy vấn( Query Syntax) và cú pháp phương thức( Method
Syntax).
Có hai hình thức cú pháp, bạn có thể sử dụng khi viết các truy vấn LINQ là cú
pháp truy vấn và cú pháp phương thức.
• Cú pháp truy vấn là một hình thức khai báo trông rất giống như một
câu lệnh SQL. Nó được viết bằng hình thức biểu thức truy vấn.
• Cú pháp phương thức là một hình thức bắt buộc, trong đó sử dụng các
lời gọi phương thức tiêu chuẩn.
Bạn cũng có thể kết hợp cả hai hình thức trong một truy vấn đơn. Microsoft
khuyến cáo sử dụng cú pháp truy vấn bởi vì nó dễ đọc hơn, và rõ ràng
hơn
nêu rõ ý định truy vấn của bạn, và do đó dễ xảy ra ít lỗi.
Đây là ví dụ về 2 cú pháp và việc kết hợp 2 cú pháp:

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

7


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

4. Cấu trúc của biểu thức truy vấn

Ví dụ:

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

8


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

II. LINQ to SQL
LINQ to SQL là một phiên bản hiện thực hóa của O/RM (object relational
mapping) có bên trong .NET Framework bản “Orcas” (nay là .NET 3.5), nó
cho phép bạn mô hình hóa một cơ sở dữ liệu dùng các lớp .NET. Sau đó
bạn có thể truy vấn cơ sở dữ liệu (CSDL) dùng LINQ, cũng như cập
nhật/thêm/xóa dữ liệu từ đó.
Giống như cơ sở dữ liệu SQL, LINQ To SQL có hỗ trợ transactions, views, and
stored procedures

III. Mô hình hóa CSDL dùng LINQ to SQL
Ví dụ dùng CSDL QL_BANHANG như hình dưới.

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

9


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

Visual Studio “Orcas” đã tích hợp thêm một trình thiết kế LINQ to SQL như một
công cụ dễ dàng cho việc mô hình hóa một cách trực quan các CSDL dùng
LINQ to SQL.Bằng cách dùng trình thiết kế LINQ to SQL, tôi có thể dễ
dàng tạo một mô hình cho CSDL QLBANHANG giống như dưới đây. Sau
khi đã kết nối với CSDL, bạn click phải chuột vào Project vidu, chọn Add
Items.

Khi đó, trình thiết kế LINQ sẽ hiện ra cho bạn. Bạn chỉ việc kéo những tables
tương ứng và thả vào màn hình design. Relationship cũng tạo ra cho bạn.

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

10


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

Mô hình LINQ to SQL ở trên định nghĩa 5 lớp thực thể:
KHACHHANG,HOADON, CHITIETHD, HANGHOA, NHANVIEN. Các thuộc
tính của mỗi lớp ánh xạ vào các cột của bảng tương ứng trong CSDL.
Mỗi instance của một lớp biểu diễn một dòng trong bảng dữ liệu. Các mũi tên giữa
bốn lớp thực thể trên biểu diễn quan hệ giữa các thực thể khác nhau, chúng được
tạo ra dựa trên các mối quan hệ primary-key/foreign-key trong CSDL. Hướng của
mũi tên chỉ ra mối quan hệ là một – một hay một – nhiều. Các thuộc tính tương
ứng sẽ được thêm vào các lớp thực thể trong các trường hợp này.

IV. Truy vấn LINQ to SQL
1. Tìm hiểu lớp DataContext
Cứ mỗi một file LINQ to SQL chúng ta thêm vào solution, một lớp DataContext
sẽ được tạo ra, nó sẽ được dùng khi cần truy vấn hay cập nhật lại các thay đổi. Lớp
DataContext được tạo sẽ có các thuộc tính để biểu diễn mỗi bảng được mô hình
hóa từ CSDL. Lớp DataContext tương đương với lớp SqlConnection trong
ADO.NET.

Ví dụ ở đây mình đặt tên LINQ to SQL
BANHANGDataContext tương ứng.

là BANHANG.dbml thì sẽ có

2. Form Quản Lý Nhân Viên và minh họa cho việc thêm, xóa ,sửa Nhân
Viên.

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

11


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

• Câu lệnh thêm nhân viên

• Câu lệnh xóa Nhân Viên

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

12


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

• Câu lệnh Sửa Nhân Viên

Để biết rõ hơn về lệnh thêm, xóa , Sửa. chúng ta tiếp tục tìm hiểu kỹ hơn ở các
phần sau.

3. Lựa chọn(Select)
Lựa chọn là đạt được bằng cách chỉ viết một truy vấn LINQ trong ngôn ngữ lập
trình của bạn và sau đó xử lý truy vấn để lấy kết quả. LINQ to SQL tự dịch tất cả
các hoạt động cần thiết vào các hoạt động SQL cần thiết mà bạn đang làm quen.
Ví dụ sau, công ty, tên công ty của khách hàng từ London được truy lục và hiển thị
trong
cửa
sổ
console.

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

13


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

4. Cách chèn hàng vào trong cơ sở dữ liệu (LINQ to SQL)
Bạn chèn hàng vào một cơ sở dữ liệu bằng cách thêm các đối tượng vào bảng
LINQ to SQL (TEntity) và sau đó gửi các thay đổi đối tới cơ sở dữ liệu. LINQ cho
SQL dịch vào những thay đổi của bạn thích hợp lệnh INSERT SQL thích hợp. Các
bước sau tóm tắt một Dưới đây là những bước giả định rằng một hợp lệ
DataContext kết nối bạn vào cơ sở dữ liệu Northwind

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

14


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

5. Cách cập nhật hàng trong cơ sở dữ (LINQ to SQL)
Bạn có thể cập nhật hàng trong một cơ sở dữ liệu bằng cách thay đổi giá trị thành
viên của các đối tượng kết hợp với bảng LINQ to SQL (TEntity) và sau đó gửi các
thay đổi đối vào cơ sở dữ liệu. LINQ cho SQL chuyển đổi sự thay đổi vào trong
lệnh SQL.
Ví dụ sau thay đổi các giá trị của ShipName và ShipVia trong kết quả của đối
tượng Object. Cuối cùng, các thay đổi với các thành viên các giá trị được gửi đến
cơ sở dữ liệu như là thay đổi trong ShipName và ShipVia cột.

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

15


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

6. Cách xóa hàng trong cơ sở dữ liệu (LINQ to SQL)
Tiến trình để xóa 1 hàng trong CSDL:
• Truy vấn cơ sở dữ liệu cho các hàng sẽ được xóa.
• Gọi các phương pháp DeleteOnSubmit.
• Gửi các thay đổi tới cơ sở dữ liệu.
Ví dụ:

Trong ví dụ sau, các khách hàng có ID khách hàng là 98128 là lấy từ các cơ sở dữ
liệu. Sau đó, sau khi xác nhận rằng các hàng củakhách hàng được gọi ra, lệnh
DeleteOnSubmit được gọi là để loại bỏ các đối tượng từ các bộ sưu tập. Cuối
cùng, SubmitChanges được gọi là để gửi lệnh xóa tới cơ sở dữ liệu.

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

16


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

7. Từ khóa Var

8. Filtering( Lọc)
Có lẽ các hành động truy vấn phổ biến nhất là một bộ lọc để áp dụng trong các
mẫu của một biểu thức logic Boolean. Các bộ lọc giúp các truy vấn trả về duy nhất
các phần tử cho các biểu thức là đúng. Kết quả là kết quả được sử dụng mệnh đề
where. Các bộ lọc có hiệu lực xác định các yếu tố đó để loại trừ từ các nguồn liên
tục. Trong ví dụ sau, chỉ những khách hàng có địa chỉ ở London sẽ được trả về.

var queryLondonCustomers = from cust in
customers
where cust.City == "London"
select cust;
Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

17


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

Bạn có thể sử dụng quen ngôn ngữ C# với các biểu thức logic AND và OR để vận
hành áp dụng như nhiều bộ lọc trong mệnh đề where. Ví dụ, chỉ trả về các khách
hàng có địa chỉ tại"London" và có tên là "Devon" bạn sẽ viết đoạn mã sau đây:

where cust.City=="London" && cust.Name ==
"Devon"
Để trả về khách hàng có địa chỉ ở London hay Paris, bạn
sẽ viết mã sau:
where cust.City == "London" || cust.City
== "Paris"
9. Ordering (Thứ tự)
Thường nó là thuận tiện để phân loại dữ liệu trả về. Mệnh đề orderby sẽ gây ra các
phần tử trong chuỗi trả về để được sắp xếp theo mặc định so sánh cho các loại
đang được sắp xếp. Ví dụ, sau đây truy vấn có thể được mở rộng để phân loại các
kết quả dựa trên thuộc tính Name. Bởi vì thuộc tính Name là một chuỗi, mặc định
nó sẽ so sánh và thực hiện sắp xếp theo thứ tự chữ cái từ A đến Z.

var queryLondonCustomers3 =
from cust in customers
where cust.City == "London"
orderby cust.Name ascending
select cust;
Để các kết quả trong thứ tự đảo ngược trật tự, từ A to Z, sử dụng mệnh đề

orderby ...descending.
10. Grouping(gom nhóm)
Mệnh đề group cho phép bạn nhóm các kết quả của bạn dựa trên một khóa mà bạn
chỉ định. Ví dụ, bạn có thể xác định rằng các kết quả cần được nhóm lại theo thuộc
tính City để tất cả các khách hàng từ London, Paris hay cá nhân đang có trong
nhóm. Trong trường hợp này, cust.City chính là khóa.

var queryCustomersByCity =
from cust in customers
group cust by cust.City;
foreach (var customerGroup in
queryCustomersByCity)
{
Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

18


Công nghệ LINQ và Ứng dụng.

}

GVHD: ThS. Nguyễn Đặng Kim Khánh

Console.WriteLine(customerGroup.Key);
foreach (Customer customer in
customerGroup)
{
Console.WriteLine(" {0}",
customer.Name);
}

Khi bạn kết thúc một truy vấn với mệnh đề group, các kết quả của bạn sẽ sẽ được
trả về một danh sách từ các danh sách. Mỗi phần tử trong danh sách là một đối
tượng có một Key thành viên và danh sách các phần tử đó là nhóm chứa khóa này.
Khi bạn lặp qua một truy vấn mà kết quả là một nhóm có trình tự, bạn cần phải sử
dụng một vòng lặp foreach. Nếu bạn cần phải tham khảo các kết quả thi hành của
một nhóm, bạn có thể sử dụng từ khóa into để tạo ra một định danh có thể được
thêm vào câu truy vấn. Dưới đây là những truy vấn trả lại chỉ những nhóm có chứa
nhiều hơn hai khách hàng:

var custQuery =
from cust in customers
group cust by cust.City into custGroup
where custGroup.Count() > 2
orderby custGroup.Key
select custGroup;
11. Kết hợp nhiều yếu tố đầu vào
Bạn có thể sử dụng một truy vấn LINQ để tạo ra một trình tự đầu ra có chứa các
phần tử từ nhiều hơn một trình tự đầu vào. Ví dụ sau cho thấy làm thế nào để kết
hợp hai cấu trúc dữ liệu trong bộ nhớ, nhưng cùng một nguyên tắc có thể được áp
dụng để kết hợp các nguồn dữ liệu từ XML hoặc SQL hoặc DataSet. Ví dự sau cho
thấy điều đó:

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

19


Công nghệ LINQ và Ứng dụng.

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

GVHD: ThS. Nguyễn Đặng Kim Khánh

Nguyễn Ngọc Lộc
Mai Hoàng Luân

20


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

12. Lựa chọn một tập hợp con của mỗi phần tử nguồn
Để chọn chỉ cần một thành viên của các phần tử nguồn nguyên tố, sử dụng thao
tác chấm. Trong ví dụ sau, giả định rằng một đối tượng Customer có chứa một số
thuộc tính public bao gồm một chuỗi có tên City. Khi thực hiện, truy vấn này sẽ
cho ra một trình tự các chuỗi đầu ra.

var query = from cust in Customers
select cust.City;
Để tạo các phần tử có chứa nhiều hơn một thuộc tính các phần tử nguồn, bạn có
thể sử dụng một đối tượng với một đối tượng có tên hoặc một loại vô danh. Ví dụ
sau cho thấy việc sử dụng một ẩn danh để đóng gói hai loại thuộc tính từ mỗi phần
tử

Customer:

var query = from cust in Customer
select new {Name = cust.Name, City
= cust.City};

13. Biểu thức Lambda
Biểu thức lambda là một phương cách mới trong việc tạo các hàm vô danh
(anonymous). Nó có thể chứa các câu lệnh cũng như các biểu thức khác. Một biểu
thức Lambda trả về kết quả của một biểu thức và có dạng như sau:

(input parameters) => expression
Dấu mở và đóng ngoặc là tùy chọn trong trong trường hợp chỉ có 1 tham số,
ngược lại nó là bắt buộc. Nếu có nhiều hơn 1 tham số thì chúng sẽ được phân cách
bằng dấu phẩy (,). Kiểu của các tham số có thể được khai báo tường minh hoặc
không, nếu không khai báo, trình duyệt sẽ tự xác định kiểu, tuy nhiên trong một số
trường hợp, bạn phải chỉ rõ kiểu của nó, ví dụ:
s => s.Length (lỗi, vì trình dịch không thể biết được s là gì)
bạn khải khai báo như sau:
(string s) => s.Length
Một biểu thức lambda dùng toán tử =>, mang ý nghĩa như là “đi đến”. Phía bên
trái của toán tử là các tham số (nếu có), bên phải là các biểu thức hay câu lệnh. Ví
dụ như biểu thức lambda x => x * x sẽ tương đương với hàm sau:
Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

21


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

int f(int x) {
return x * x;
}
Một biểu thức lambda có thể được dùng để tạo các delegate giống như sau:
delegate
int
del(int
i);
del
myDelegate
=
x
=>
x
*
x;
int j = myDelegate(5);
Toán tử => có cùng độ ưu tiên như phép gán = và được xét từ phải sang trái, do
vậy câu lệnh d = x => x * x sẽ có ý nghĩa khác với x => d = x * x. Ở câu lệnh thứ
nhất, d sẽ có kiểu delegate và nó đại diện cho biểu thức lambda x => x*x, câu lệnh
thứ 2 hoàn toàn là 1 biểu thức lambda, trong đó d sẽ mang giá trị của bình phương
giá trị được truyền vào.
Các biểu thức lambda thường được dùng trong các câu truy vấn LINQ như là các
tham số của các mệnh đề truy vấn kiểu như Where.

14. Giới thiệu một định danh bằng cách sử dụng let
Bạn có thể sử dụng từ khóa let để giới thiệu cho một định danh cho bất kỳ biểu
thức trả về trong biểu thức truy vấn.Định danh này có thể là một sự tiện nghi, như
trong ví dụ sau đây, hoặc nó có thể nâng cao hiệu quả sự thực thi bằng cách lưu trữ
các kết quả của một biểu thức để nó không phải được tính toán nhiều lần.

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

22


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

15. Để chuyển đổi hoặc dự án trong mệnh đề select
Nó rất phổ biến cho một truy vấn để tạo ra một trình tự các phần tử khác nhau từ
các phần tử trong các trình tự nguồn. Xóa hay ghi chú cho truy vấn trước đó của
bạn và thực hiện vòng lặp, và thay thế nó với đoạn mã sau đây. Lưu ý rằng các
truy vấn sẽ trả về một trình tự của các chuỗi, và thực tế này được phản ánh trong
vòng lặp foreach.

Để tạo ra một trình tự của Students có tổng điểm là cao hơn mức trung bình,
cùng với Student ID bạn có thể sử dụng một loại vô danh trong câu lệnh select:

16. Từ Khóa Join
Bạn có 2 lựa chọn khi truy vấn nhiều bảng có quan hệ với nhau: lệnh Join hay ký
hiệu dấu chấm. Cả hai cách đều hiệu quả, nhưng cách thứ hai dễ dàng kiểm tra
hơn.Trong LiNQ to SQL, bạn cũng có thể liên kết nhiều bảng bằng việc dùng từ
khóa Join.

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

23


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

IEnumerable dùng cho hầu hết các collectiton của .Net framework.
IQueryable dùng cho LINQ to SQL, Entities, hoặc XML objects.
IEnumerable dùng để thực hiện các công việc nặng như filter, map, ... (local)
IQueryable đẩy gánh nặng cho provider (server).
ví dụ:

//sau khi provider xử lý, trả về những customer có city = "London"
IQueryable custs = from c in db.Customers
where c.City == "London"
select c;
//sau khi provider trả về tất cả customer. Framework mới lọc ra những
customer có city = "London"
IEnumerable custs = from c in db.Customers
where c.City == "London"
select c;
V. Cách kết nối một cơ sở dữ liệu (LINQ to SQL)
DataContext là đường dẫn chính mà bạn kết nối với một cơ sở dữ liệu,sau đó bạn
truy lục dữ liệu từ đó và gửi trở lại các thay đổi. Bạn chỉ cần sử dụng DataContext
tương tự như khi bạn sử dụng một ADO.NET SqlConnection. Trong thực tế, các
DataContextđược khởi động với một kết nối hoặc kết nối chuỗi mà bạn cung cấp.
Mục đích của DataContext là để dịch các yêu cầu cho các đối tượng vào các truy
vấn của SQL để dựa trên các cơ sở dữ liệu, và sau đó thu thập các đối tượng ra
khỏi các kết quả. DataContext cho phép Language-Integrated Query (LINQ) bằng
cách thực thi các mô hình tổ chức các toán tử truy vấn chuẩn chẳng hạn như mệnh
đề “Where” và “Select”.
Ví dụ
Trong ví dụ sau, các DataContext được sử dụng để kết nối với các cơ sở dữ liệu
mẫu Northwind và để truy lục lại hàng của khách hàng là người sống ở London.

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

24


Công nghệ LINQ và Ứng dụng.

GVHD: ThS. Nguyễn Đặng Kim Khánh

1. Cách tạo cơ sở dữ liệu (LINQ to SQL)
Các lớp có các thuộc tính được mô tả vể cấu trúc của bảng và cột dữ liệu liên
quan. Bạn có thể sử dụng thông tin này để tạo mới các trường cơ sở dữ liệu. Khi
bạn gọi phương thức CreateDatabase trên DataContext, LINQ to SQL để xây dựng
một cơ sở dữ liệu mới với một cơ cấu xác định bởi các đối tượng.
Bạn có thể sử dụng tính năng này trong bất kỳ kịch bản nào, đặc biệt là khi được
biết đến như là một nhà cung cấp dịch vụ dữ liệu ví dụ như SQL Server 2005
Express:
Bạn đang xây dựng một ứng dụng tự động cài đặt trên một hệ thống của khác
hàng.
Bạn đang xây dựng mộtứng dụng dành cho Client mà cần lưu cơ sở dữ liệu cục bộ
lưu trong trạng thái ngoại tuyến.
Bạn cũng có thể sử dụng CreateDatabase với SQL Server bằng cách sử dụng một
tập tin .mdf hay chỉ là định mục tùy thuộc vào chuỗi kết nối. LINQ to SQL sử
dụng chuỗi kết nối để xác định các cơ sở dữ liệu được tạo ra và cách nó được tạo
trên máy chủ.

Nguyễn Đỗ Quỳnh Nam
Mai Chính Hữu

Nguyễn Ngọc Lộc
Mai Hoàng Luân

25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×