Một khi bạn đã học được các toán tử truy vấn chuân của LINQ được cung cấp trong ngôn ngữ C# hoặc VB.NET, ban co thê truy cập bất kỳ dữ liệu nào mà LINQ hỗ trợ mà không cần phải học cú p
Trang 1Tiều luận cuối ky - HK II Tim hiéu vé céng nghé LINO TRƯỜNG ĐẠI HỌC NGÂN HÀNG THÀNH PHÓ HÒ CHÍ MINH
KHOA HE THONG THONG TIN QUAN LÝ
Trang 2Tiều luận cuối ky - HK II Tim hiéu vé céng nghé LINO
MUC LUC LỜI MỞ ĐẦU - 225222222 2221122221122221122111122111122111211112121112011211121 2 ere 4 TIM HEU VE LINQ 1n -4 6
L Gi0i thiGu VE LINQ cccccccccccccccccsscsscsscesesssesvessessesvessessessessessissessesstssessvsseevsetevsevees 6
IL Giới thiệu về các fray vẫn LINQ 5c HH rau 7
1 Thành phần cầu thành của LINQ 5-55 SE 1121212212122 21.112 cr tre 7 1.1 Các đữ liệu nguồn 52 SE E1 E1 1111 1t 111 1 1 1t ng rưg 8
1.2 Truy VÂn - S L1 1211111 1111011112211 121111 1101111 k1 211k kg kg vu 9
1.4 Thực thi bắt buộc tức thời s22 22 1 12211122211121711121112 2.1 eg 10 IIL Tổng quan về thiết kế @ /Đ - ST HE ng HH HH HH gu ll
2 Cầu hình và tạo ra DataContext ST HT ng nn TT TH rrrse 12
3 Tạo tổ chức các lớp mà cơ sở đữ liệu bản đồ đề bàn và xem - 2 ccsc: 12
4 DataContext tạo ra phương pháp gọi thủ tục lưu trữ và các hàm 12
5 Cầu hình một DataContext đề sử dụng các thủ tục lưu trữ dữ liệu giữa các lớp
thực thê và cơ sở đữ liệu 2S SH 1251151151112 TH He HH Hee 12
6 Thừa kế và các O / R_ Designer - c1 121111 22 112 2n tran 12
IV Các truy vẫn LINQ to SQL - TH HH reo 12
1 Tach roi DataContext da tạo ra và các lớp thực thể vào các namespaces khác
0705 ELLE EOEE CLUE CHEE cdot EE CtdEecosaee ee ciaaeeentieaeenias 12
2 Lam thế nào đề: Chỉ định lưu trữ Thực hiện thủ tục Update, Insert, va delete 13
V LINO vat cc kiéu c6 chung Mic MGM ccc cccccccccccssccsesscssesseesccsvessescessesesesseees 13
1 IEnumerable các biến trong các câu truy vẫn LING s- 5c cty 14
2 Cho phép chương trình biên dịch xử lý các loại khai báo chung 14
3 Hoạt động truy vấn cơ bản án T221 115112 n HH Hee 14
3.1 Obtaiming a Data SOUTC€ L2 20 2211112111210 1112 111181 11kg key 14 3.2 FIlterimg( LỌC) - 2 22 2211212111211 1211 1121110111181 1 1811101111111 111111112 15 3.3 Ordering (Thứ tự) - 1120121111221 122 11 1115 1811111511111 1 xe 15
K N€Cioj./adddidtddidddiẳẮaAẰẬAẰAẮAẰAAAẮẮẮ l6
3.6 Selecting (ProJecfIOT), L c2 n2 nh SH T502 11H HH ey 17
4 Chuyên đổi đữ liệu với LINQ - 5c St E1 1212112111112 11 tt trerưyn 17
Sinh viên thực hiện Nguyễn Thị Bích Ngọc - D0I
Trang 3Tiều luận cuối ky - HK II Tim hiéu vé céng nghé LINO 4.1 Tham gia vao nhiéu yếu tô đầu vào xuất ra một trình tự .ssz se: 18
4.2 Lựa chọn một tập hợp con của mỗi phân tử nguồn C HH TT TT 11k KKk KT KT 19 4.3 Chuyên đối các đối tượng trong bộ nhớ vào XML cccsccee se, 19
4.4 Thực hiện các hoạt động trên các phân tử nguồn ¬ 20
4.5 Loại các quan hệ trong thao tác truy vấn -:- cty 21
5 Truy vẫn mà không chuyên hóa các nguồn đữ liệu - 5c cty 21
5.1 Trinh bién dịch phải suy luận ra cac loai thong tin cee 22
6 Cu phap truy van vs cu phap phurong thitc 0.ccccccecececeseecseeseseseseeseeeeeeesseneees 23 6.1 Toan tir truy van chuan mé rong cac phurong thtte ce cccccececeseeeeeeeeeeeee 23 6.2 Biểu thức Lambda - 5:22 22231222111221112211122211211111211112 11.11 ee 25
7 Các đặc trưng được LINQ hỗ trợ trong C#2.0 - + SE HH He 26
7.1 Biểu thức truy vấn - c ch HH HH HH H1 1e 26 7.2 Implictfly Typed Variables (Var) S12 v12 HH HH nhe 26 7.3 Đối tượng, và tập hợp các giá trị đầu vào se rgrereey 26
7.4 Các loại chưa xác định G9991 1195555551111 k ng nnnkv vn 27
7.5 Các phương thức mở rộng - 1 2212121112111 12211211 1181118111011 key 27
7.6 Các thuộc tính tự động thi hành L2 1222122111211 12122 1 ru 27
§ Viết câu truy vấn trong Cổ cty HH ng He 27
8.1 Để thêm các đữ liệu nguồn S1 n2 212112112121 11211 1 trrerroe 27
9 Tao các truy Na 28 9.1 Đề tạo một truy van đơn ¬ eee ccc ccee ces ecenseessecesecessecseeesseetsesesesessatees 28
9.3 Để thêm một điều kiện lọc :- 2+ 222+2221122111122111122111 2111111 tr re 29
9.4 Chỉnh sửa truy vấn - St ng 1121211121212 trưa 29 9.5 Để nhóm các kết quả - St 1 1EE2111121121111 1121151 1 11111 rrerrreg 30
9.6 To order the groups by thetr key valÌue c2 12 nh 2s rree 30
9.7 Đề giới thiệu một định đanh bằng cách sử dụng let -s-cccscscss>ẻ 30
9.8 Đề sử dụng cú pháp phương thức trong một biêu thức truy vấn 31
9.9 Dé chuyén đổi hoặc dự án trong mệnh đề select - 5 nga 31 KẾT LUẬN 5s 2E 1 H111 ng HH HH re 32 TÀI LIỆU THAM KHẢO - - SE E2 1EE1271EE1211 11 E111 1 E111 kkrrrrrerree 33 0909.).09 8 34
Sinh viên thực hiện Nguyễn Thị Bích Ngọc - D0I
Trang 4Tiểu luận cuối kỳ - LIK II Tìm hiểu về công nghệ LINQ
LỜI MỞ ĐẦU
Công tác quản lý là một công tác không thê thiếu của tất cả các tô chức về kinh tế Với các lý do ấy thì phát triển Công nghệ - Hệ thống thông tin đã trở thành một ngành kinh tế quan trọng, đặc biệt là Công nghệ phần mềm Sự ra đời của các sản pham phan mềm đặc biệt là các phần mềm ứng dụng như quản lý trong vài năm gần đây mang lại nhiều thuận lợi trong công tác quán lý hàng hóa, quản lý nhận sự tránh sự nhằm lẫn, that thu, mất mát Tuy nhiên bên cạnh những tiện lợi mà các chương trình này mang lại, vẫn
còn nhiều khó khăn, nhược điểm cần được khắc phục Nhược điểm của các chương trỉnh
còn nhiều lý do như: Bản thân các nhà lập trình còn hạn chế về trình độ cũng như kinh
nghiệm làm phần mềm
Trong phát triển phần mềm, nhu cầu truy xuất và thao tác dữ liệu là vô cùng cần thiết Đặc biét, voi SOL Express dé truy van dit liéu ta phải dùng đến các câu lệnh Query rất phức tạp, hơn nữa đề dùng trong C# lại thêm một tầng phức tạp nữa với các câu lệnh: ConnectionString khởi tạo két néi toi Database, tự khai báo các biến đề chạy một lệnh - commnand, rồi còn phải tính toán đầu ra của câu lệnh Thật là quá phức tạp nêu như ta có một chương trình khủng
Tir do LINQ ra doi, LINQ cuốn hút các lập trình viên bởi nhiều lý do Một số lợi
ích có thê không hoàn toàn rõ ràng trong thời điểm hiện nay Tuy nhiên LINQ được thiết
kế có khá năng mở rộng nên thư viện và trình biên dịch LINQ sẽ phat triển theo thời gian
1 Chỉ cần nhớ một ngôn ngữ truy vẫn
Đây là lợi thế đầu tiên mà LINQ cung cấp cho các lập trình viên Một khi bạn đã học được các toán tử truy vấn chuân của LINQ được cung cấp trong ngôn ngữ C# hoặc
VB.NET, ban co thê truy cập bất kỳ dữ liệu nào mà LINQ hỗ trợ mà không cần phải học
cú pháp ngôn ngữ truy vấn dữ liệu đó
2 Kiểm tra kiểu dữ liệu và tên lúc biên dịch
Các truy van LINQ duoc kiểm tra kiểu đữ liệu và tên lúc biên dịch, giảm thiểu các
lỗi xuất hiện lúc thực thi Nhiều ngôn ngữ 7-SÓU chăng hạn, nhúng câu truy vấn vào
chuỗi Điều này làm trình biên dịch khó phát hiện ra lỗi và lỗi có thê xảy ra lúc thực thi Nhiều lỗi về kiểu đữ liệu và thiếu kiểu đữ liệu cho các trường dữ liệu sẽ được phát hiện
Trang 5Tiểu luận cuối kỳ - HK II Tìm hiểu về công nghệ LINO lúc biên địch và sẽ được chỉnh sửa tại thời điểm đó
3 Dễ đọc mấ
Cú pháp của LINQ rất đơn giản do nó đã xóa bỏ đi các các đoạn mã vòng lặp, sắp xếp, gom nhóm, điều kiện phức tạp
4 Trên 50 toán tử truy vẫn chuẩn
Các toán tử truy vấn chuân được xây dựng sẵn cho phép dễ dàng thực hiện các công việc như gom nhóm, sắp xép, liên kết, tập hợp, lọc, hoặc lấy đữ liệu
Nhiều toán tử truy vấn có thể được tìm thấy trong các ngôn ngữ truy vấn cơ sở đữ liệu Nếu bạn đã từng làm việc với các ngôn ngữ truy vấn đữ liệu thì bạn có thể đễ đàng phán đoán ra chức năng của các toán tử đó Tuy nhiên cũng có vải toàn tử hoàn toàn mới,
được thêm vào đề làm việc với dữ liệu dé lam don giản hóa các đoạn mã truyền thống vốn
phức tạp và đài dòng vào trong 1 dòng lệnh
5 Kiến trúc mớ và có thÊ mớ rộng
LINOQ được thiết kế có khả năng mở rộng Có nghĩa là có thể thêm vào các toán tử khi cần thiết
Đề tài: “Tìm hiểu về LinQ”
Với đề tài được giao đã giúp em vận dụng được những hiểu biết của mình về LinQ
để xây dựng được chương trình ứng dụng thực tế cho các bài toán thu/chi, quản lí bảng điểm học lực của học sinh sinh viên trong quá trình học môn Lập trình hướng đối tượng, đáp ứng được một số yêu cầu công việc đặt ra hàng ngày
1 https:/ympsolution.blogspot.com/2013/08/bai-2-cac-loi-ich-cua-linq.html
Sinh viên thực hiện Nguyễn Thị Bích Ngọc - D01
Trang 6Tiểu luận cuối kỳ - HK I Tìm hiểu về công nghệ LINO
TIM HIEU VE LINQ
I Giới thiệu về LINQ:
LINQ la viét tắt của Language - Infegrafed Query, là một sự đôi mới trong Visual
Studio 2008 va NET Framework 3.5, nó là cầu nỗi giữa thê giới đối tượng và thế giới dữ
liệu
Theo truyền thống, các truy vấn trên dữ liệu dé dang duoc thé hién đưới dạng
chuỗi thuần túy mà không cần kiểm tra kiểu thời gian biên dịch hoặc hỗ trợ trực quan
Ngoài ra, bạn cần học các ngôn ngữ truy vấn khác nhau cho từng loại nguồn dữ liệu khác
nhau, chăng hạn như cơ sở đữ liệu S@7,„ tài liệu XA⁄, và dich vu Web LINQ lam cho mét
truy vấn một lớp đầu tiên xây dựng trong ngôn ngữ C# và Wisual Basic Bạn có thê viết các truy vấn dựa trên một tập hợp các đối tượng bằng cách sử dụng ngôn ngữ, từ khóa và
toán tử quen thuộc Ví dụ minh họa sau đây cho thay một truy van đã hoàn thành một
phần đến cơ sở đữ liệu SÓU Server trong C#, với hỗ trợ kiểm tra kiểu hoàn chỉnh và hỗ
trợ trực quan
var companyNameQuery = Dim companyNameQuery = _
Trong Visual Studio 2008, ban có thé viết các truy van LINQ trong Visual Basic hoac C#
cho co so dir ligu SOL Server, tai ligu XME, bé dir ligu ADO.NET va bat ky bộ tinh nang TEnumerable hoac pho biến nào của các đối tượng được hỗ trợ, chăng hạn như giao diện
IEnumerable <T> Hiện tại, các nhà cung cấp bên thứ ba đang viết hỗ trợ LINQ cho ADO.NET Framework và các thực thể LINQ cho nhiều dịch vụ Web và triển khai dữ liệu khác Bạn có thê sử dụng các truy vấn LINQ trong các dự án mới hoặc các đự án hiện có
Sinh viên thực hiện Nguyễn Thị Bích Ngọc - D01
Trang 7Tiều luận cuối ky - HK II Tim hiéu vé céng nghé LINO Yêu cầu duy nhat la cac du an nay dugc xdy dung trén NET Framework 3.5
II Giới thiệu về các truy vấn LINO
Truy vấn là biểu thức lấy đữ liệu từ đữ liệu nguồn Truy vấn thường được chỉ định
bằng ngôn ngữ truy van được thiết kế cho một mục dich cu thé Theo thoi gian, nhiều
ngôn ngữ khác nhau đã được phát triển cho các kiêu đữ liệu nguồn, chăng hạn như SOL cho cơ sở dữ liệu quan hệ và XÓery cho XA⁄U Do đó, các nhà phát triển đã học một
ngôn ngữ truy van mới cho các loại hoặc định dạng đữ liệu nguồn mà họ phải hỗ trợ
LINO đơn giản hóa tình huồng này bằng cách cung cấp một mô hình nhất quán đề xử lý các loại và định dạng đữ liệu nguồn khác nhau Trong các truy vấn LINQ, bạn phải luôn
sử dụng các đối tượng Bạn có thé str dụng cùng một mẫu truy vấn cơ bản để mã hóa và chuyên đổi đữ liệu trong tài liệu XA⁄ZU, cơ sở đữ liệu SÓQL và ADO.NET DaraSeis, đồng thời chuyên đổi chúng sang bất kỳ định đạng nào khác có sẵn cho nhà cung cấp LINQ
1 Thành phần cấu thành của LINQ:
Tắt cả các biểu thức LINQ lam viéc theo ba thao tác sau:
Sinh viên thực hiện Nguyễn Thị Bích Ngọc - D01
Trang 8Tiều luận cuối ky - HK II Tim hiéu vé céng nghé LINO
foreach (var item in
Trang 9Tiều luận cuối ky - HK II Tim hiéu vé céng nghé LINO
- Sử dụng LINQ đổi với cac d6i tuong collection ma implement tir
- VEnumerable hoặc IEnumerable<T> (đữ liệu được lưu trong bộ nhớ)
Được sử dụng rộng rãi đặc biệt đôi với những bài toán cân hiệu năng
cao
rF Thực hiện map các tables, views, store procedures thanh cac đôi
tượng LINQ sẽ thực hiện truy vấn trên các đối tượng đó bằng cách chuyền đổi qua lại giữa đối tượng và câu lệnh sql
- Ngoài truy vấn ta cũng có thê thực hiện thêm/sửa/xóa đữ liệu dựa LINO to SQL trên các đối tượng trên
- H6 tro transaction
- Ưu điểm: được sử dụng khá nhiều trong thực tế dưới cái tên Entity
Framework hoac Entity Framework Core
Nhược điểm: chỉ làm việc với cơ sở đữ liệu là SOL Server
Tương tự như LING to SGL nhưng hỗ trợ nhiều loại cơ sở đữ liệu
Nhược điểm: sử dụng phức tạp Nhiêu cơ sở đữ liệu không thích hợp
sử dụng chung với Ne¿
LING to DataSets |Su ket hợp giữa LINQ và ADO.NET
LINQ to XML |Truy vẫn thông tin trong ñle XA⁄ZL
Trong ví dụ trước, vì dữ liệu là một mảng nên nó hỗ trợ đầy đủ các tính năng
chung của giao điện /Emwerable <7`> Điều này có nghĩa là nó thực sự có thê được truy vấn bằng LINQ Các truy vấn được thực thi trong câu lệnh ƒoreach và ƒoreach yêu cầu 1Enumerahle hoặc IEnumerahle (T) Các loại hỗ trợ giao điện như IEmumerable (T) hoặc IQueryable (T) được gọi là các loại queryable Loại queryabile có thê cung cấp dịch vụ cho các nguồn đữ liệu LINQ mà không cần sửa đôi hoặc xử lý đặc biệt Nêu nguồn dữ liệu chưa tồn tại trong bộ nhớ dưới dạng loại geryaiie, thì trình cung cấp LINQ phải trình bày nó như vậy Ví dụ, LINQ to XML một tài liệu ÄX4⁄⁄ vào một geryabhle XElement
// Query execution
foreach (int num in numQuery)
{
Console Write(" {0,1} ", num);
Sinh viên thực hiện Nguyễn Thị Bích Ngọc - D01
Trang 10Tiểu luận cuối kỳ - LIK II Tìm hiểu về công nghệ LINQ
}
Với LINQ to SQL, trước tiên bạn tạo đôi tượng quan hệ ánh xạ tại thời điệm thiệt
kế, được thực hiện thủ công hoặc sử dụng trình thiết kế quan hệ đối tuong (O/ R
designer) Ban viét va thyc thi cac truy van dya trén cac déi trong LINQ to SQL xử lý
giao tiếp với cơ sở đữ liệu Trong ví dụ sau, C?⁄/omer đại diện cho một bảng trong cơ sở
dữ liệu, và 7ab/e<C„sfomer> hỗ trợ các thuộc tính chung /Qeryabie<7> mà được bắt đầu từ JEmumerable<T>
// Create a data source from a SQL Server database
được thực hiện tại một số điểm nhất định
1.3 Thực thỉ truy van:
% Hoãn thực thị:
Như ở trạng thái trước, bản thân biến truy vấn chỉ chứa các lệnh truy vấn Hiện tại, việc thực thi truy vấn bị trì hoãn cho đến khi biến truy van duoc lặp lại trong câu lệnh foreach Day là cơ sở cho hoãn thực thi và điển hình trong ví đụ sau:
Trang 11Tiểu luận cuối kỳ - LIK II Tìm hiểu về công nghệ LINQ xuyên tùy thích Ví dụ: bạn có một cơ sở đữ liệu đang được cập nhật Đăng nhập liên tục thông qua một ứng dụng riêng biệt Trong ứng dụng của bạn, bạn có thê xây dựng một truy vấn đề lây đữ liệu mới nhất và bạn có thể chạy nó liên tục trong một khoảng thời gian
đề nhận được kết quả mọi lúc
1.4 Thực thi bắt buộc tức thời:
Các truy vấn trong đó liên hợp thực hiện các chức năng trên một loạt các phần tử nguồn trước tiên phải lặp qua các phần tử Một sé vi du la truy van Count, Max, Average,
và First Những cái chạy mà không có khai báo ƒøreach rõ ràng như chính truy vấn phải
sử dụng ƒøreach đề trả về một kết quả Cũng lưu ý rằng các loại truy vấn trả về một giá trị, không phải 1a mét tap hop JEnumerable Truy van sau day tra về tổng số các số trong máng nguồn:
var evenNumQuery = from num in numbers where (num % 2) == 0 select num;
int evenNumCount = evenNumQuery.Count();
List<int> numQuery2 = (from num in numbers where (num % 2) = 0 select num).ToList();
// or like this:
//numQuery3 is still an int[] var numQuery3 =
(from num in numbers where (num % 2) == 0 select num) ToArray();
II Tổng quan về thiết kế O / R
Thiết kế quan hệ đối tượng (O2 Designer) cung cấp hình ảnh thiết kế để tạo LINQ to SQL để tô chức các thực thê và các liên kết dựa trên đối tượng (mối quan hệ) trong một mô hình đối tượng trong một ứng dụng nhằm ánh xạ các đôi tượng trong cơ sở
dữ liệu Nó cũng tạo nên một mạch kiểu rõ rang, DataContext dugc su dung dé gửi và
nhận dữ liệu giữa các lớp thực thê và cơ sở đữ liệu
O/ R Designer cing cung cap chic nang dé anh xa cac thu tuc được lưu trữ và các
hàm để triển khai các phuong thire ma DataContext tra về dữ liệu và tập trung tô chức các
lớp thực thê Cuối cùng, Ø⁄# Designer cung cấp khả năng thiết kế các mối quan hệ kế
thừa giữa các lớp thực thể
O/ R Designer tạo các tệp có phần mở rộng đbml cung cấp ánh xạ giữa các lớp và
dữ liệu LINQ to SQL Ø⁄Ñ Designer cũng tạo các kiêu aaCorrext và tô chức các lớp
thực thể Ø⁄ Designer có hai khu vực độc lập trên bề mặt thiết kế: các thực thê ở cửa số
bên trái và các phương thức ở cửa sô bên phải Cửa số các thực thể chính là bề mặt thiết
Trang 12Tiểu luận cuối kỳ - LIK II Tìm hiểu về công nghệ LINQ
kế cho lớp thực thê, các liên kết và mức độ kế thừa Các phương thức trong ngăn bên phải
là bề mặt thiết kế hiển thị các phương pháp ánh xạ DataContext dé lưu trữ các thủ tục và hàm
1 Mo cac O7 R Designer:
Bạn có thé mo O/ R bang cách thêm một class mdi vao du an cua minh O/ R
Designer là một cách dễ dàng đề ánh xạ các đối tượng vì nó chỉ hỗ trợ ánh xạ mối quan
hé 1:1 Nói cách khác, một lớp thực thể chỉ có thể có 1:1 ánh xạ liên quan đến cơ sở đữ liệu hoặc dạng wiew Các ánh xạ phức tạp, chăng hạn như ánh xạ của một lớp thực thé
tham gia vào một bảng, hiện không khả dụng Ngoài ra, nhà thiết kế là một người tạo mã một chiều tự động Điều này có nghĩa là chỉ những thay đổi bạn thực hiện đối với Trình thiết kế bề mặt mới được phản ánh trong tập tin code Hướng dẫn thay đổi đối với tập tin code không được phản ánh trong O/ R Designer Moi thay d6i duoc thuc hién theo cach thủ công đối với tập tin code sẽ bị ghi đè khi thiết kế được lưu và code sẽ tự động phục hồi
2 Cấu hình và tạo ra DataContext:
Sau khi ban da thém lép LINQ cho SỌL vào một phần tử dự án và mở Trình thiết
kế Ø⁄ bồ cục giao diện người dùng trong thé hiện một DataContext c6 thé dinh cau
hinh DataContext dA cau hinh két nối với thông tin Thông tin được cung cấp bởi phần tử đầu tiên được trích xuất Do đó, Dz/aCowex được câu hình bằng cách sử dụng thông tin
kết nỗi của phan tử lần đầu tiên được dua vao bé mat thiét ké
3 Tạo tô chức các lớp mà cơ sở dữ liệu bản đồ để bàn và xem:
Bạn có thê tạo các lớp thực thể được ánh xạ từ các bang va dang view bang cach
kéo và thả cơ sở đữ liệu và dạng view tu co sé dt ligu Server Explorer / Explorer sang O/
R Designer trước trên bề mặt thiết kế Nếu phần tử sau này được thêm vào Ø⁄
Designer su dụng kết nối khác, bạn có thể thay déi két néi cho DataContext
4 DataContext tạo ra phương pháp gọi thủ tục lưu trữ và các hàm:
Bạn có thê tạo một 74/zCorext chứa các phương thức gọi (ánh xạ) các thủ tục và các hàm được lưu trữ bằng cách kéo chúng từ cơ sở dữ liệu Server Explorer / Explorer vao O/ R Designer Các thủ tục và hàm đã lưu trữ được chứa trong @⁄R Designer nhu các phương thức của DataContext
5 Cầu hình một DataContext để sử dụng các thủ tục lưu trữ dữ liệu lưu dữ liệu giữa các lớp thực thể và cơ sở dữ liệu:
Như đã đề cập ở trên, bạn có thé tao mét DataContext chita cac phương thức gọi các thủ tục lưu trữ và các hàm Bạn cũng có thể chí định các thủ tục Theo mặc định, bộ
Trang 13Tiểu luận cuối kỳ - HK I Tìm hiểu về cơng nghệ LINO
nhớ duoc st dung cho LINQ to SQL để thực hiện các hành dong insert, update, va delete
6 Thừa kế và các O / R Designer:
Giống như các đối tượng khác, các lớp LINQ to SQL cé thé str dung duoc co thé được kề thừa và truy xuất bởi các lớp Mối quan hệ kế thừa được tạo trong cơ sở đữ liệu theo một số cách Ø⁄R Designer hỗ trợ khái niệm kề thừa bảng đơn vì nĩ thường được
triên khai trên các hệ thơng
IV Các truy vấn LINQ to SQL
1 Tách rời DataContext đã tạo ra và các lớp thực thể vào các namespaces khác nhau:
O⁄R Designer cung cấp các thuộc tính Cortext Namespace và Emity Namespace
trong DataContext Cac thuéc tính này xác dinh tén cla DataContext và các lớp thực thé được tạo Theo mặc định, các thuộc tinh trong va DataContext va cac thuc thé khac Cac
lớp thực thé duge tao trong img dung Namespace Dé tao ma trong mét Namespace khac với các ứng dung Namesapce, hay nhap mot gia tn vao cac thudc tinh cia Context Namespace va (hoặc Entity Namespace
2 Lam thé nao dé: Chi định lưu trữ Thực hiện thủ tục Update, Insert, và delete: Các thủ tục đã lưu trữ cĩ thê được tích hợp trong Ø⁄# Designer và được thực hiện như các phương pháp điền hình trong 2øa/2Còzzex: Chúng cũng cĩ thể được sử dụng để
ghi đè các phương thức mặc định trong LINQ to SQL để thực hiện hành vi insert, update, va delete Khi cac thay đổi được thực thẻ lưu trong một tơ chức cơ sở đữ liệu (vi
du: bang cach goi phurong thire SubmitChanges)
Nếu thủ tục được lưu trữ của bạn trả về một giá trị cần được gửi lại cho client (vi dụ: giá trị được tính tốn trong thủ tục được lưu trữ), hãy tạo các tham số của bạn đề được
lưu trữ trong thủ tục Nêu bạn khơng thê sử dụng các tham số, hãy viết một phần phương thức một phần của quá trình triên khai thay vì dựa vào các quyền phu quyét do O/ R
Designer tao ra Các thành viên được chỉ định để tạo ra giá trị Các giá trị cơ sở dữ liệu
phải được đặt chính xác thành các giá trị sau khi quá trình ƒNSER7 hoặc UPDATT đã hồn tất thành cơng
V LINQ và các kiểu cĩ chung đặc điểm:
Các truy vấn LINQ dựa trên các kiêu chung được giới thiệu trong phiên bản 2.0 của ME7 Framework Bạn khơng cần phải đi sâu vào các điểm chung trước khi bắt đầu
Trang 14Tiểu luận cuối kỳ - HK I Tìm hiểu về công nghệ LINO
Tuy nhiên, bạn có thể muốn hiểu hai khái niệm cơ bản:
1 Khi bạn khởi tạo một tập hợp có các thuộc tính giống như 7s (7), hãy thay thé
"7" bằng kiểu đối tượng Bao gồm các đối tượng trong danh sách này Ví dụ: đanh sách các chuỗi ký tự được biểu điễn dưới đạng ⁄¡s/<s/ing> và danh sách các đối tượng khách hang cua Customer duoc biéu dién duéi dang List<Customer> Danh sach chung thuộc kiêu sinh động và có nhiều ưu điểm hơn một tập hợp lưu trữ các mục của nó dưới dạng đối tượng Nếu bạn cố gắng thém Customer vao List<string>, ban sé nhan được thông báo lỗi tại thời điểm biên dich That dé dang, that dé dang đề sử dụng các tập hop vi bạn không thê thực hiện các thao tác đã được phân loại
2 IEnumerable (T) là một giao điện cho phép bạn liệt kê một tập hợp các lớp bằng cau lénh foreach Tap hop cac lép chung hé tro [Enumerable (T) giéng voi tap hop cac I6p khéng chung nhu /Enumerable hé tro ArrayList
1 IEnumerable các biến trong các câu truy van LINQ:
Cac bién trong truy van LINQ thudéc loai /Enumerable (7) hoặc thuộc loại có
nguồn gốc như /eryabie (7) Nếu bạn nhìn vào một truy vấn với các biến kiểu
IEnumerable<Customer>, ching chi là các cách thức truy vấn Khi bạn hoàn tất, một
chuỗi không có gì hoặc nhiều đối tượng Cs(omer được tạo
IEnumerable<Customer> customerQuery =from cust ỉn customers
where cust.City == "London" selecf cust;
foreach (Customer customer in customerQuery)
{
Console WriteLine(customer.LastName + ", " + customer.FirstName);
}
2, Cho phép chương trình biên dịch xử lý các loại khai báo chung:
Nếu muốn, bạn có thể tránh cú pháp chung chung bằng cách sử dung tir khoa var
Từ khóa var cho trình biên dịch biết rằng trình biên dịch nhận ra loại biến mà truy van dang tim kiém trong cac nguon dữ liệu được chỉ định trong mệnh đề /rom Ví dụ sau cho kết quả tương tự như đoạn mã được tạo ở trên
var customerQuery2 =
from cust in customers
where cust.City == "London"
select cust;
Sinh viên thực hiện Nguyên Thị Bich Ngoc - DO1
Trang 15Tiêu luận cuỗi kỳ - HK II Tìm hiệu về công nghệ LINQ foreach(var customer in customerQuery2)
{
Console.WriteLine(customer.LastName + ", " + cụúustomer,FirstName) ;¿
}
Từ khóa vør rất hữu ích khi các kiêu khác nhau Trong số các biến được xác định
rõ ràng, hoặc khi nó không quan trọng, chỉ định rõ ràng các kiêu chung chung, chăng hạn như những kiểu được tạo bởi các truy vấn nhóm Chúng tôi khuyên rằng khi bạn sử dụng
var, ban thay rang mã của bạn có thê khó đọc hơn đối với người khác
3 Hoạt động truy vấn cơ bản:
Chủ đề này cung cấp một giới thiệu ngắn gọn về các truy vấn LINQ và một số
minh họa về các loại thao tác điển hình mà bạn có thể thực hiện trên một truy vấn
LƯU Ý: Nếu bạn đã quen thuộc với ngôn ngữ truy vấn như SỞ, hoặc XQuery, ban
có thê bỏ qua hầu hết các chủ đề này Đọc phân tiếp theo về "mệnh dé from" dé tim hiéu
thêm về thứ tự của các mệnh đề trong biểu thức truy van LINQ
3.1 Obtaining a Data Source:
° Lay vật là một nguồn dĩ? liệu:
Trong một truy vấn LINQ, bước đầu tiên là xác định nguồn dữ liệu Trong C '#, như
trong hầu hết các ngôn ngữ lập trình, một biến phải được khai báo trước khi nó có thé
được sử dụng Trong một truy vấn trong LINQ, mệnh đề from xuất hiện đầu tiên đề giới thiệu nguồn đữ liệu (Cwsfomer) và nhiều biên (cws?)
3.2 Filtering( Loc):
Có lẽ hành động truy vấn phố biến nhất là một bộ lọc được áp dụng cho các mau trong biểu thitc logic Boolean B6 loc trợ giúp truy vấn chỉ trả về các mục cho các biểu thức đúng Các kết quả là kết quả được sử dụng với mệnh đề wi:ere Bộ lọc hiệu quả xác
định yếu tố nào sẽ bị loại trừ khỏi các nguồn liên tục Ví dụ sau chỉ trả về những khách
hàng có địa chỉ ở London
Trang 16Tiều luận cuối ky - HK II Tim hiéu vé céng nghé LINO
var queryLondonCustomers = from cust in customers
where cust.City == "London"
select cust;
Bạn có thê sử dụng ngôn ngữ C# quen thuộc với các biéu thie logic AND va OR dé lam
việc như nhiều bộ lọc trong mệnh dé WHERE Vi du: dé chi tra lai những khách hàng có
địa chỉ ở “London” và tên là "Devon”, hãy viết đoạn mã sau:
where cust.City=="London" && cust Name = "Devon"
Đề trả về khách hàng có địa chỉ ở London hay Paris, ban sé viết mã sau:
where cust.City == "London" || cust.City == "Paris"
3.3 Ordering (Thit tu):
Noi chung, viéc sap xếp dữ liệu được trả về sẽ thuận tiện Mệnh đề orderby lam
cho các phần tử trong chuỗi trả về được sắp xếp theo so sánh tiêu chuẩn cho kiểu được yêu cầu Ví dụ: truy vấn sau có thê được mở rộng đề sắp xếp các kết quả dựa trên thuộc tinh Name Theo mặc định, vì thuộc tính Nưme là một chuỗi, nó sẽ so sánh và sắp xếp các kết quả theo thứ tự bảng chữ cái từ A đến Z
var queryLondonCustomers3 =
from cust in customers
orderby cust.Name ascending
tất cả khách hàng từ London, Paris hoặc cá nhân đều được bao gồm trong nhóm Trong
trường hợp này, cwsứ Cï#y là chìa khóa
Lưu ý: Các loại được hiển thị rõ ràng trong các ví dụ để minh họa các khái niệm Bạn
cũng có thé str dung khoa cust.Query, group, cad customer dé trinh bién dich co thé xac
dinh chinh xac loai
Trang 17Tiêu luận cuỗi kỳ - HK II Tìm hiệu về công nghệ LINQ // queryCustomersByCity is an IEnumerable<IGrouping<string, Customer>>
var queryCustomersByCity =
group cust by cust.City;
// customerGroup is an IGrouping<string, Customer>
foreach (var customerGroup in queryCustomersByCity)
{
Console.WriteLine (customerGroup Key);
foreach (Customer customer in customerGroup)
{
Console.WriteLine(" {O}", customer.Name);
}
Khi một truy vấn kết thúc bằng mệnh đề group, kết quả của nó được trả về dưới
dạng một danh sách các danh sách Mỗi mục trong danh sách là một đối tượng có khóa
thành viên và danh sách các mục, đó là nhóm chứa khóa này Khi lặp qua một truy vẫn
dẫn đến một nhóm được sắp xếp theo trình tự, bạn cần sử dung vong lap foreach Néu ban can truy van két quả của việc chạy một nhóm, từ khóa Into có thể được sử dụng để tạo một số nhận đạng có thể được thêm vào truy vấn Các truy vấn sau sẽ chỉ trả về các nhóm 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;
3.5 Joining:
Quá trình Join tao ra mét phép néi gitta nhiéu dir kién khéng 16 rang trong nguén
dữ liệu Ví dụ: bạn có thể thực hiện một thao tác đề tìm tất cả các khách hàng ở London
đã đặt hàng sản phẩm từ nhà cung cấp có trụ sở tại Paris Trong LINQ, mệnh dé Join luôn kết hợp các hoạt động dựa trên các tập đối tượng thay vì bảng cơ sở dữ liệu Bạn không thường xuyên sử dụng mệnh đề Join trong LINQ cũng như trong SÓL, vì các khóa ngoại LINQ được mô tả trong mô hình dưới dạng các thuộc tính có chứa một số phần
tử.Ví dụ, một đối tượng C/omer chứa một tập Order cua các đối tượng Đúng hơn là
biêu diễn một thao tác, bạn truy cập các thứ tự bằng cách sử dụng dấu chấm:
from order In Customer.Orders
3.6 Selecting (Projections):
Mệnh dé Select ra cac két quả được trả về bởi một truy vấn và chí định "hình dang" hoặc kiểu của mỗi kết quả được trả về Ví dụ: bạn có thể cho biết liệu kết quả của bạn có
bao gồm tat cả các đối tượng hay không Đối tượng Cwsfomer chỉ yêu cầu một thành viên,