Luận văn Đồ án kỹ sư IITìm hiểu công nghệ LINQ và ứng dụng

Luận văn  
Đồ án ksư IITìm hiu  
công nghLINQ và ng  
dng  
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
Mục lục  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 1  
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 2  
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 3  
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 4  
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 5  
 
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
I. Gii thiu vLINQ.  
LINQ là viết tt ca tLanguage Integrated Query tm dch là ngôn ngtích  
hp truy vn là mt sự đổi mi trong Visual Studio 2008 và .NET Framework 3.5 là cu  
ni khong cách gia thế gii của các đối tượng vi thế gii ca dliu.  
Theo truyn thng các câu truy vn trên dliệu được thhin mt cách ddàng  
giống như các chuỗi kí tự đơn giản mà không cần đến kiu kim tra ti thời điểm biên  
dch hoc shtrca trình htrtrực quan. Hơn nữa bn cn phi tìm hiu mt ngôn  
ngtruy vn khác nhau cho mi loi dliu liu nguồn khác nhau như: Cở sdliu  
SQL, tài liu XML, các dch vWeb. LINQ làm cho mt truy vn mt lớp đầu tiên xây  
dng trong ngôn ngC# và Visual Basic. Bn viết mt câu truy vn da trên tp hp các  
đối tượng bng cách sdng ngôn ng, các tkhóa các toán tquen thuc. Ví dminh  
họa sau đây cho thấy mt phn câu truy vấn được hoàn thành dựa trên cơ sở dliu SQL  
Server trong C# với đầy đủ loi kim tra và shtrca trình htrtrc quan.  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 6  
   
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
Trong Visual Studio 2008 bn có thviết các câu truy vn LINQ trong Visual  
Basic hoc C# với cơ sở dliu SQL Server, các tài liu XML, ADO.NET Datasets và  
bt ktập đối tượng được htrIEnumerable hoặc có đặc điểm chung ging giao din  
IEnumerable<T>. LINQ htrcho các thc thể ADO.NET Framework và LINQ đang  
được các nhà cung cp hin nay viết bi bên thba cho nhiu dch vWeb và các trin  
khai dliu khác. Bn có thsdng các truy vn LINQ trong các dán mi hoc trong  
các dán hin có. Mt yêu cu duy nht là các dự án đó được xây dng trên .NET  
Framework 3.5.  
II. Gii thiu vcác truy vn LINQ.  
Mt câu truy vn là mt biêu thc gi ra dliu tdliu ngun. Câu truy vn  
thường nói rõ trong ngôn ngtruy vấn đữ được thiết kế cho mc dích riêng. Các ngôn  
ngữ khác nhau đã được phát trin theo thi gian cho các loi dliu ngn, ví dụ như SQL  
dành cho cơ sở dliu quan hvà XQuery dành cho XML. Vì vy các nhà phát triển đã  
tìm hiu mt ngôn ngtruy vn mi cho các loi dliu ngun hoặc các định dng mà  
hphi htrợ. LINQ đơn giản tình trng này bng cách cung cp mt mô hình nht quán  
để làm vic vi các loi dliu ngun khác nhau và các định dng. Trong mt truy vn  
LINQ bn phi luôn luôn làm vic với các đối tượng. Bn sdng giống như truy vấn  
mẫu cơ bản mã hóa và chuyển đổi dliu trong các tài liệu XML, cơ sở dliu SQL,  
ADO.NET DataSet và cho bt kì một định đạng nào mà mt nhà cung cp LINQ có sn.  
II.1 Ba phn ca mt biu thc LINQ.  
Tt ccác biu thc LINQ làm vic theo ba thao tác.  
1. Có được các dliu ngun.  
2. To các truy vn.  
3. Thc hin các truy vn.  
Ví dtrong mã nguồn sau đây cho thấy ba phn ca mt truy vn hoạt động như thế  
nào. Ví dsdng mt mng số nguyên như là một sthay thế cho ngun dliu; tuy  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 7  
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
nhiên, trong cùng mt khái nim áp dng cho các ngun dliệu khác cũng có. Ví dụ này  
sẽ được gii thiệu đến trong sut phn còn li ca chủ đề này.  
class IntroToLINQ  
{
static void Main()  
{
// The Three Parts of a LINQ Query:  
// 1. Data source.  
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };  
// 2. Query creation.  
// numQuery is an IEnumerable<int>  
var numQuery =  
from num in numbers  
where (num % 2) == 0  
select num;  
// 3. Query execution.  
foreach (int num in numQuery)  
{
Console.Write("{0,1} ", num);  
}
}
}
Minh họa sau đây cho thấy các hoạt động truy vn tìm kiếm được hoàn tt. Trong  
LINQ vic thc hin các truy vn riêng bit tbn thân câu truy vn. Nói cách khác bn  
không ly ra bt kdliu nào bng cách to ra mt biến truy vn.  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 8  
 
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
II.2 Các dliu ngun.  
Trong ví dụ trước vì dliu là mt mng, nó hoàn toàn htrợ đặc điểm chung  
giao diện IEnumerable <T>. Điều này có nghĩa thực tế nó có thể được truy vn vi  
LINQ. Mt truy vấn được thc hin trong mt câu lnh foreach và foreach yêu cu  
IEnumerable hay IEnumerable(T). Loi có htrIEnumerable(T) hoc mt giao din  
như IQueryable(T) được gi là các loi queryable. Mt loi queryable không yêu cu  
phi sửa đổi hay xử lý đặc biệt để phc vmt LINQ ngun dliu. Nếu các ngun dữ  
liu không phi là đã có trong bộ nhớ như là một loi queryable, mt nhà cung cp LINQ  
phải đại diện cho nó như vậy. Ví d, LINQ to XML mt tài liu XML vào mt queryable  
XElement:  
// Query execution.  
foreach (int num in numQuery)  
{
Console.Write("{0,1} ", num);  
}
Vi LINQ to SQL trước tiên bn to một đối tượng quan hệ được ánh xvào lúc  
thiết kế cái này được làm thcông hoc bng cách sdng trình thiết kế đối tượng quan  
h(O/R Designer). Bn viết các câu truy vn ca bn dựa trên đối tượng và thi hành  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 9  
   
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
LINQ to SQL để slý các giao tiếp với cơ sở dliu. Trong ví dụ sau, Customer đại din  
cho mt bảng trong cơ sở dliu, và Table<Customer> htrợ các đặc tính chung  
IQueryable<T> mà được bắt đầu tIEnumerable<T>.  
// Create a data source from a SQL Server database.  
// using System.Data.Linq;  
DataContext db = new DataContext(@"c:\northwind\northwnd.mdf");  
II.3 Truy vn.  
Truy vn trong ví dụ trước trvtt ccác stmng snguyên. Các biu thc  
truy vn cha ba mệnh đề: from, where, select.(Nếu bạn đang quen vi SQL sắp đặt ca  
các mệnh đề là sai vtrí trong SQL). Mệnh đề from dùng để xác định ngun dliu,  
mệnh đề where dùng để lc dliu, mệnh đề select dùng để chn ra nhng phn tử được  
trv. các mệnh đề này và các mệnh đề truy vn khác sẽ được tho lun chi tiết trong  
phần LINQ Query Expresstions(Hướng dn lp trình C#). Lúc này một điểm quan trng  
là trong LINQ, các biến truy vn tựu nó không hành động và trvkhông có dliu. Nó  
chchứa đựng thông tin đó là yêu cầu tkết qutrvkhi câu truy vấn được thc hin  
ti mt số điểm sau.  
II.3 Thc thi truy vn.  
Hoãn thc thi.  
Cũng giống như trạng thái trước đây, biến truy vn tnó chcha các lnh truy  
vn. Hin nay sthc thi ca các truy vn là hoãn lại đến tn khi bn nhc lại đối vi  
biến truy vn trong câu lệnh foreach. Cái này làm cơ sở để quy cho hoãn thc thi và là cái  
điển hình trong ví dsau:  
// Query execution.  
foreach (int num in numQuery)  
{
Console.Write("{0,1} ", num);  
}
Câu lệnh foreach là nơi các kết qutruy vấn được trvví dcác truy vấn trước  
đó biến num được lp và nm dmi giá trtrong trình ttrv. Bi các biến truy vn tự  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 10  
   
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
nó không bao gicha kết qutruy vn, bn có ththc hiện nó thường xuyên như bạn  
mun. Ví dbn dang có một cơ sở dliệu mà đang được cp nhp liên tc bi mt ng  
dng riêng bit. Trong ng dng ca bn, bn có thto mt truy vấn để ly ra dliu  
mi nht và bn có ththi hành nó mt cách liên tc ti mt khong thời gian để ly kết  
qumi ln.  
II.4 Thc thi bt buc tc thi.  
Truy vn mà skết hp thc hin các chức năng trên một lot các phn tngun  
đầu tiên phi lp đi lp li trên nhng nhn t. Ví dụ như các truy vấn Count, Max,  
Average, và First. Nhng thc thi mà không có mt câu lnh foreach nào rõ ràng bi vì  
các truy vn tnó phi sdụng foreach để trvlà mt kết quả. Cũng lưu ý rằng các loi  
truy vn trli mt giá tr, không phi là mt tp IEnumerable. Các truy vấn sau đây sẽ  
trvmt số lượng các strong mng ngun:  
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();  
III. Tng quan vthiết kế O / R.  
Thiết kế đối tượng quan h(O / R Designer) cung cp mt hình nh thiết kế trc  
quan cho vic tạo LINQ to SQL để tchc các thc thvà skết hp (các mi quan h)  
dựa trên các đối tượng trong một cơ sở dliu. Nói cách khác, các O / R được thiết kế sử  
dụng để to ra một mô hình đối tượng trong mt ng dụng để ánh xạ các đối tượng trong  
một cơ sở dliệu. Nó cũng tạo ra mt mnh kiểu rõ ràng DataContext được sdụng để  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 11  
   
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
gi và nhn dliu gia các lp thc thể và cơ sở dliệu. O / R Designer cũng cung cấp  
tính năng cho việc ánh xcác thtục lưu trữ và các hàm để thc hiện các phương thức  
trong DataContext trvcác dliu và populating tchc các lp thc th. Cui cùng, O  
/ R Designer cung cp khả năng thiết kế tha kế các mi quan hgia các lp thc th.  
O / R Designer to ra nhng file có phn mrông là .dbml cung cp cho vic ánh  
xgia các lớp LINQ to SQL và các đối tượng dliệu. O / R Designer cũng tạo ra nhng  
kiu DataContext và tchc các lp thc th.  
O / R Designer có hai khu vc riêng bit trên bmt thiết kế: các thc thtrong  
ca sổ bên trái, và các phương thức trong ca sbên phi. Ca scác thc thchính là  
bmt thiết kế lp thc th, các skết hp, và các bc kế thừa. Các phương thức trong  
ca sbên philà bmt thiết kế có hin thị DataContext các phương thức ánh xạ để lưu  
trcác thtc và hàm.  
III.1 Mcác O / R Designer.  
Bn có thmcác O / R bng cách thêm mt class mi vào dán  
O / R Designer là mt cách dễ dàng đẻ ánh xcác đối tượng bi vì nó chhtrợ  
ánh x1:1các mi quan h. Nói cách khác, mt lp thc thcó thchcó mt ánh xạ  
1:1trong mi quan hvi một cơ sở dliu hoc view. Ánh xphc tp, chng hạn như  
ánh xmt lp thc ththam gia vào mt bng, hiện chưa htr. Ngoài ra, các nhà thiết  
kế là mt sinh mã tự động mt chiều. Điều này có nghĩa là chỉ thay đổi mà bn thc hin  
để các nhà thiết kế bmặt được phn ánh trong các tập tin code. Hướng dẫn để thay đổi  
các tập tin code không được phn ánh trong O / R Designer. Bt kỳ thay đổi nào mà bn  
làm thcông trong các tập tin mã được ghi đè khi thiết kế được lưu và code là tự phc  
hi.  
III.2 Cu hình và to ra DataContext  
Sau khi bn thêm mt lp LINQ cho SQL cho mt mc dán và mO / R  
Designer thiết kế, các thiết kế bmt trng rỗng đại din mt DataContext sẵn sàng để  
được cấu hình. các DataContext được cu hình kết ni với các thông tin được cung cp  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 12  
         
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
bi các phn tử đầu tiên được kéo vào cho vic thiết kế .. Vì vậy, các DataContext được  
cu hình bng cách sdng kết ni thông tin tcác phn tdầu tiên được kéo vào thiết  
kế bmt thiết kế.  
III.3 To tchc các lp mà cơ sdliu bn đđbàn và xem.  
Bn có thto các lp thc thể được ánh xtcác bng và các view bng cách  
kéo thả các cơ sở dliu và các view Server Explorer / Explorer Database lên các O / R  
Designer. Như chỉ định trong phần trước của DataContext được cu hình kết ni vi các  
thông tin được cung cp bi các phn tử đầu tiên được kéo thvào bmt thiết kế. Nếu  
mt mc sau mà sdng mt kết ni khác sẽ được thêm vào O / R Designer, bn có thể  
thay đổi kết ni cho các DataContext.  
III.4 DataContext to ra phương pháp gi thtc lưu trvà các hàm.  
Bn có thtạo DataContext chưa các phương thức mà gọi (được ánh xti) các  
thtục và các hàm lưu trữ bng cách kéo chúng tServer Explorer / Explorer Database  
lên các O / R Designer. Các thtục lưu trữ và các hàm được đưa vào các O / R Designer  
như phương thc ca DataContext.  
III.5 Cu hình mt DataContext đsdng các thtc lưu trdliu lưu dliu  
gia các lp thc thvà cơ sdliu.  
Như đã nêu trên, bạn có thto DataContext chứa các phương thức gi các thtc  
lưu trữ và các hàm. Ngoài ra, bạn cũng có thể chỉ định các thtục lưu trữ được sdng  
mặc định cho LINQ to SQL để thc hiện hành đng insert, update, và delete.  
III.6 Tha kế và các O / R Designer  
Giống như các đối tượng khác, các lp LINQ to SQL có thsdụng được kế tha  
và thu được tcác lp. Trong một cơ sở dliu, các mi quan htha kế được to ra  
trong mt scách. O / R Designer htrcác khái nim về đơn-bng kế thừa như nó  
thường trin khai thc hin trong các hthng.  
IV. Các truy vn LINQ to SQL.  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 13  
     
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
IV.1 Tách ri DataContext đã to ra và các lp thc thvào các namespaces  
khác nhau  
O / R Designer cung cp cho các thuc tính Context Namespace và Entity  
Namespace trên DataContext. Nhng thuộc tính xác định tên DataContext và các lp  
thc thể đã được to ra. Theo mặc định, các thuc tính là trng rng và các DataContext  
và các lp thc thể được to ra vào ng dng của namesapce. Để to ra các mã vào mt  
namespace khác các ng dng ca namespace, nhp mt giá trvào trong thuc tính  
Context Namespace và / hoc Entity Namespace.  
IV.2 Làm thế nào đ: Chđnh lưu trThc hin thtc Update, Insert, và delete  
Thtục lưu trữ có thể được đưa vào các O / R Designer và thực hiện như các  
phương thức điển hình trong DataContext. Chúng cũng có thể được sdụng để phquyết  
các phương thức mặc định trong LINQ to SQLđể thc hin hành vi thêm, cp nht, và  
xóa khi các thay đổi đều được lưu từ các thc thể để tchc một cơ sở dliu (ví d, khi  
gọi các phương thức SubmitChanges).  
Nếu thtục lưu trữ ca bn trvgiá trmà cn phải được gi li cho client (ví  
d, giá trtính toán trong thtục lưu trữ), to ra tham sca bạn được lưu trữ trong các  
thtc. Nếu bn không thsdng tham s, viết mt phần phương thức mt phn ca  
vic trin khai thc hin thay vì da vào các phquyết được to ra bi các O / R  
Designer. Các thành viên được ánh xạ để to ra các giá trị cho cơ sở dliu cn phi  
được thiết lp thích hp cho các giá trsau khi hoàn tt thành công ca qua trình INSERT  
hoc UPDATE.  
V. LINQ và các kiu có chung đc đim  
Các câu truy vấn LINQ được da trên các loi có chung đặc điểm, đã được gii thiu  
trong phiên bn 2.0 ca. NET Framework. Bn không cn phi có kiến thức đi vào tìm  
hiểu sâu các đặc điểm chung trước khi bn có thbắt đầu viết truy vn. Tuy nhiên, bn có  
thmun hiu rõ hai khái niệm cơ bản:  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 14  
   
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
1. Khi bn to mt ví dca mt tp hợp có chung đặc điểm như List(T), bạn thay thế  
"T" vi các loại đối tượng trong danh sách đó sẽ cha. Ví d, mt danh sách các  
xâu kí tự được thhiện như List<string> , và mt danh sách Customer các đối  
tượng khách hàng được thhiện như List<Customer>. Mt danh sách chung có  
kiểu sinh động và cung cp nhiu lợi ích hơn một tp hp nó ct gicác phn tử  
của chúng như đối tượng. Nếu bn cgắng để thêm mt Customer vào trong mộ  
List<string> , bn snhận được mt li ti thi gian biên son. Nó là mt cách dễ  
dàng để sdng chung các tp hp vì bn không có ththc hin các hoạt động đã  
được phân loi.  
2. IEnumerable (T) là giao din cho phép tp hp các lớp để lit kê bng cách sử  
dng câu lnh foreach. Tp hp chung các lp htrIEnumerable (T) cũng giống  
như tập hp các lp không chung chng hạn như IEnumerable htrArrayList.  
V.1 IEnumerable các biến trong các câu truy vn LINQ  
Các biến trong câu truy vn LINQ có kiểu như IEnumerable (T) hoc có kiu bt  
ngun tmt nguồn như IQueryable (T). Khi bn xem mt câu truy vn có biến là kiu  
IEnumerable<Customer>, nó đơn giản là các thc truy vấn, khi nó được thc hin, sẽ  
to ra mt trình tkhông có gì hoc nhiều đối tượng Customer.  
IEnumerable<Customer> customerQuery =from cust in customers  
where cust.City == "London"  
select cust;  
foreach (Customer customer in customerQuery)  
{
Console.WriteLine(customer.LastName + ", " + customer.FirstName);  
}
V.2 Cho phép chương trình biên dch xlý các loi khai báo chung  
Nếu bn thích, bn có thtránh cú pháp chung chung bng cách sdng tkhóa  
var. Các tkhóa var để hướng dn trình biên dch nhn ra loi biến mt truy vn tìm  
kiếm ti các ngun dliệu được xác định trong mệnh đề from. Ví dsau cho cùng mt  
kết quả như đoạn mã được xây dng phía trên.  
var customerQuery2 =  
from cust in customers  
where cust.City == "London"  
select cust;  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 15  
   
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
foreach(var customer in customerQuery2)  
{
Console.WriteLine(customer.LastName + ", " + customer.FirstName);  
}
Các tkhóa var rt hu ích khi các loi ca biến là rõ ràng hoc khi nó không  
phải là điều quan trọng để xác định rõ ràng các loại chung như là cái đó được to ra bng  
cách nhóm các truy vấn. Nói chung, chúng tôi đề nghrng nếu bn sdng var, nhn  
thy rng nó có thlàm cho mã ca bạn khó khăn hơn cho những người khác đọc.  
V.3 Hot đng truy vn cơ bn.  
Chủ đề này cho mt gii thiu tóm tt vtruy vn LINQ và mt sbiu hin ca  
các loi hình hoạt động điển hình mà bn thc hin trong mt truy vn.  
Chú ý: Nếu bạn đã là quen thuộc vi mt truy vn ngôn ngữ như SQL hay XQuery, bạn  
có thbqua hu hết các chủ đề này. Đọc v"mệnh đề from" trong phn kế tiếp để tìm  
hiu vtrt tca các mệnh đề trong biu thc truy vn LINQ.  
V.3.1 Obtaining a Data Source  
Ly vt là mt ngun dliu  
Trong mt truy vấn LINQ, bước đầu tiên là xác định ngun dliu. Trong C #  
cũng như trong hầu hết các ngôn nglp trình mt biến phải được khai báo trước khi nó  
có thể được sdng. Trong mt truy vn LINQ, mệnh đề from đứng đầu tiên để gii  
thiu các ngun dliu (customer) và nhiu biến (cust).  
//queryAllCustomers is an IEnumerable<Customer>  
var queryAllCustomers = from cust in customers  
select cust;  
Phm vi biến giống như các biến lp trong mt vòng lp foreach, ngoi trkhông có thc  
smt vòng lp xy ra trong mt biu thc truy vn. Khi truy vấn được thi hành, trong  
phm vi biến sphc vụ như là một tham chiếu lần lượt đến các các phn ttrong mi  
customers. Bi vì trình biên dch có thnhn ra các kiu khác nhau ca cuts, bn không  
thể xác định nó rõ ràng. Bsung phm vi các biến có thể được gii thiu bi mt mnh  
đề let.  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 16  
     
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
V.3.2 Filtering( Lc)  
Có lẽ các hành đọng truy vn phbiến nht là mt blọc để áp dng trong các  
mu ca mt biu thc logic Boolean. Các blc giúp các truy vn trvduy nht các  
phn tcho các biu thức là đúng. Kết qulà kết quả được sdng mệnh đề where. Các  
blc có hiu lực xác định các yếu tố đó để loi trtcác ngun liên tc. Trong ví dụ  
sau, chnhng khách hàng có địa chỉ ở London sẽ được trv.  
var queryLondonCustomers = from cust in customers  
where cust.City == "London"  
select cust;  
Bn có thsdng quen ngôn ngC# vi các biu thức logic AND và OR để vn  
hành áp dụng như nhiều blc trong mệnh đề where. Ví d, chtrvcác khách hàng có  
địa chti"London" và có tên là "Devon" bn sviết đoạn mã sau đây:  
where cust.City=="London" && cust.Name == "Devon"  
Để trvề khách hàng có địa chỉ ở London hay Paris, bn sviết mã sau:  
where cust.City == "London" || cust.City == "Paris"  
V.3.3 Ordering (Thứ tự)  
Thường nó là thun tiện để phân loi dliu trv. Mệnh đề orderby sgây ra  
các phn ttrong chui trvề để được sp xếp theo mặc định so sánh cho các loại đang  
được sp xếp. Ví dụ, sau đây truy vấn có thể được mrộng để phân loi các kết quda  
trên thuc tính Name. Bi vì thuc tính Name là mt chui, mặc định nó sso sánh và  
thc hin sp xếp theo thtchcá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 qutrong thtự đảo ngược trt t, tA to Z, sdng mệnh đề  
orderby ...descending.  
V.3.4 Grouping  
Mệnh đề group cho phép bn nhóm các kết quca bn da trên mt khóa mà bn  
chỉ định. Ví d, bn có thể xác định rng các kết qucần được nhóm li theo thuc tính  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 17  
 
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
City để tt ccác khách hàng từ London, Paris hay cá nhân đang có trong nhóm. Trong  
trường hp này, cust.City chính là khóa.  
Chú ý: Các kiu rõ ràng đang có trong các ví dụ để minh ha các khái nim. Bạn cũng có  
thsdng chính cho custQuery, group,cad customer để cho trình biên dịch xác định  
chính xác loi.  
// queryCustomersByCity is an IEnumerable<IGrouping<string, Customer>>  
var queryCustomersByCity =  
from cust in customers  
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("  
{0}", customer.Name);  
}
}
Khi bn kết thúc mt truy vn vi mệnh đề group, các kết quca bn ssẽ được  
trvmt danh sách tcác danh sách. Mi phn ttrong danh sách là một đối tượng có  
mt Key thành viên và danh sách các phn tử đó là nhóm chứa khóa này. Khi bn lp qua  
mt truy vn mà kết qulà mt nhóm có trình t, bn cn phi sdng mt vòng lp  
foreach. Nếu bn cn phi tham kho các kết quthi hành ca mt nhóm, bn có thsử  
dng tkhóa into để to ra một định danh có thể được thêm vào câu truy vấn. Dưới đây  
là nhng truy vn trli chnhng nhóm có cha 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;  
V.3.5 Joining  
Thao tác Join to ra skết hp gia nhiu skiện không được rõ ràng mô trong  
ngun dliu. Ví d, bn có ththc hin mt thao tác để tìm tt ccác khách hàng ở  
London những người đặt hàng các sn phm tnhà cung cp, họ đang ở Paris. Trong  
LINQ mệnh đề Join luôn luôn tham gia các hoạt động da trên tập đối tượng thay vì các  
bng cơ sở dliu. Trong LINQ bn không sdng mệnh đề Join thường xuyên như  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 18  
   
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
bn làm trong SQL bi vì các khóa ngoi LINQ miêu tả trong mô hình như là thuộc tính  
nm gimt tp các mc. Ví d, một đối tượng Customer có cha mt tp Order ca  
các đối tượng. Đúng hơn là biu din mt thao tác, bn truy cp các thtbng cách sử  
dng du chm:  
from order in Customer.Orders...  
V.3.6 Selecting (Projections)  
Mệnh đề Select đưa ra các kết qutrvca mt câu truy vấn và xác định "hình  
dng" hoc kiu ca mi kết qutrv. Ví d, bn có thchỉ định cho dù kết quca bn  
sbao gm tt cả các đối tượng Customer, chcn mt thành viên, mt nhóm ca các  
thành viên, hoc mt skết quloi hoàn toàn khác nhau da trên tính toán hay một đối  
tượng mi to ra. Khi mệnh đề Select đưa ra một cái gì đó khác là mt bn sao ca các  
phn tngun, thao tác được gi là bn dtho. Vic sdng các bn dthảo để chuyn  
đổi dliu là mt khnăng của biu thc truy vn LINQ.  
V.4 Chuyn đi dliu vi LINQ  
Ngôn ng-Integrated Query (LINQ) không phi là chcó truy li dliệu. Nó cũng  
là mt công cmnh mcho vic chuyn dliu. Bng cách sdng mt truy vn  
LINQ, bn có thsdng mt chui ngun dliu vào và sửa đổi nó trong nhiều cách để  
to ra mt chui ra mi. Bn có thsửa đổi trình tbn thân nó mà không sửa đổi các  
phn tbng cách phân loi và gom nhóm. Nhưng có lẽ trong hu hết các tính năng mạnh  
mca các câu truy vn LINQ là khả năng tạo loi mới. Đây là hoàn ho trong mệnh đề  
select. Ví d, bn có ththc hin các nhim vsau:  
Hp nht nhiều dãy đầu vào thành mt dãy đầu ra đơn lẻ để có mt loi mi.  
To ra dãy các phn tbao gm chmt hoc mt vài thuc tính ca mi phn t.  
To ra dãy các phn tbao gm các kết quca sthi hành trên các ngun dữ  
liu.  
To ra dãy trong một định dng khác nhau. Ví d, bn có thchuyển đổi nhng  
hàng dliu tSQL hoặc văn bản vào file XML.  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 19  
 
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
Đây chỉ là mt vài ví d. Tt nhiên, nhng schuyn đổi có thể được kết hp theo  
cách khác nhau trong cùng mt truy vấn. Hơn nữa, trình tra ca mt chui truy vn này  
có thể được sdụng như là yếu tố đầu vào cho mt chui truy vn mi.  
V.4.1 Tham gia vào nhiu yếu tđu vào xut ra mt trình t.  
Bn có thsdng mt truy vấn LINQ để to ra mt trình tự đầu ra có cha các  
phn ttnhiều hơn một trình tự đầu vào. Ví dsau cho thy làm thế nào để kết hp hai  
cu trúc dliu trong bnhớ, nhưng cùng một nguyên tc có thể được áp dụng để kết  
hp các ngun dliu tXML hoc SQL hoc DataSet. Ví dsau cho thấy điều đó:  
class Student  
{
public string First { get; set; }  
public string Last {get; set;}  
public int ID { get; set; }  
public string Street { get; set; }  
public string City { get; set; }  
public List<int> Scores;  
}
class Teacher  
{
public string First { get; set; }  
public string Last { get; set; }  
public int ID { get; set; }  
public string City { get; set; }  
}
Ví dsau cho thy mt câu truy vn:  
class DataTransformations  
{
static void Main()  
{
// Create the first data source.  
List<Student> students = new List<Student>()  
{
new Student {First="Svetlana",  
Last="Omelchenko",  
ID=111,  
Street="123 Main Street",  
City="Seattle",  
Scores= new List<int> {97, 92, 81, 60}},  
new Student {First="Claire",  
Last="O’Donnell",  
ID=112,  
Street="124 Main Street",  
City="Redmond",  
Scores= new List<int> {75, 84, 91, 39}},  
new Student {First="Sven",  
Last="Mortensen",  
ID=113,  
Street="125 Main Street",  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 20  
 
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
City="Lake City",  
Scores= new List<int> {88, 94, 65, 91}},  
};  
// Create the second data source.  
List<Teacher> teachers = new List<Teacher>()  
{
new Teacher {First="Ann", Last="Beebe", ID=945, City = "Seattle"},  
new Teacher {First="Alex", Last="Robinson", ID=956, City = "Redmond"},  
new Teacher {First="Michiyo", Last="Sato", ID=972, City = "Tacoma"}  
};  
// Create the query.  
var peopleInSeattle = (from student in students  
where student.City == "Seattle"  
select student.Last)  
.Concat(from teacher in teachers  
where teacher.City == "Seattle"  
select teacher.Last);  
Console.WriteLine("The following students and teachers live in Seattle:");  
// Execute the query.  
foreach (var person in peopleInSeattle)  
{
Console.WriteLine(person);  
}
Console.WriteLine("Press any key to exit.");  
Console.ReadKey();  
}
}
/* Output:  
The following students and teachers live in Seattle:  
Omelchenko  
Beebe  
*/  
V.4.2 La chn mt tp hp con ca mi phn tngun  
Có hai cách chính đla chn mt nhóm ca mi phn ttrong chui ngun:  
1. Để chn chcn mt thành viên ca các phn tngun nguyên t, sdng thao  
tác chm. Trong ví dsau, giả định rng một đối tượng Customer có cha mt số  
thuc tính public bao gm mt chui có tên City. Khi thc hin, truy vn này scho  
ra mt trình tcác chuỗi đầu ra.  
var query = from cust in Customers  
select cust.City;  
3. Để to các phn tcó cha nhiều hơn một thuc tính các phn tngun, bn có thể  
sdng một đối tượng vi một đối tượng có tên hoc mt loi vô danh. Ví dsau  
cho thy vic sdng mt ẩn danh để đóng gói hai loi thuc tính tmi phn tử  
Customer:  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 21  
 
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
var query = from cust in Customer  
select new {Name = cust.Name, City = cust.City};  
V.4.3 Chuyn đi các đi tượng trong bnhvào XML  
Các câu truy vn LINQ làm cho nó ddàng chuyn hóa dliu gia câu trúc dữ  
liu trong bnhớ, cơ sở dliu SQL, ADO.NET Datasets và lung XML, hoc các tài  
liu. Ví dsau cho thy vic chuyển đổi dliu trong bnhvào các phn ttrong  
XML:  
class XMLTransform  
{
static void Main()  
{
// Create the data source by using a collection initializer.  
List<Student> students = new List<Student>()  
{
new Student {First="Svetlana", Last="Omelchenko", ID=111, Scores = new  
List<int>{97, 92, 81, 60}},  
new Student {First="Claire", Last="O’Donnell", ID=112, Scores = new  
List<int>{75, 84, 91, 39}},  
new Student {First="Sven", Last="Mortensen", ID=113, Scores = new  
List<int>{88, 94, 65, 91}},  
};  
// Create the query.  
var studentsToXML = new XElement("Root",  
from student in students  
let x = String.Format("{0},{1},{2},{3}", student.Scores[0],  
student.Scores[1], student.Scores[2], student.Scores[3])  
select new XElement("student",  
new XElement("First", student.First),  
new XElement("Last", student.Last),  
new XElement("Scores", x)  
) // end "student"  
); // end "Root"  
// Execute the query.  
Console.WriteLine(studentsToXML);  
// Keep the console open in debug mode.  
Console.WriteLine("Press any key to exit.");  
Console.ReadKey();  
}
}
Ta có kết qulà:  
< Root>  
<student>  
<First>Svetlana</First>  
<Last>Omelchenko</Last>  
<Scores>97,92,81,60</Scores>  
</student>  
<student>  
<First>Claire</First>  
<Last>O'Donnell</Last>  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 22  
 
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
<Scores>75,84,91,39</Scores>  
</student>  
<student>  
<First>Sven</First>  
<Last>Mortensen</Last>  
<Scores>88,94,65,91</Scores>  
</student>  
</Root>  
V.4.4 Thc hin các hot đng trên các phn tngun.  
Mt trình tự đầu ra có thkhông cha bt knhng phn thoc thuc tính ca phn tử  
ttrình tnguồn. Đầu ra phải đượcthay thế được bi chui các giá trị được tính bng  
cách sdng các phn tnguồn như đối số đầu vào. Dưới đây là những truy vấn đơn  
giản, khi nó được thc hin, kết quả đầu ra ca mt trình tnhng chui có giá trị đại  
din cho mt tính toán da trên các ngun trình tcác phn tthuc kiu double.  
Chú ý: Vic gi các phương thc trong các biu thc truy vấn không được htrnếu  
truy vn sẽ được dch sang mt tên min khác. Ví d, bn không thgọi phương thức C #  
thông thường trong LINQ to SQL vì SQL Server không có ngcnh cho nó. Tuy nhiên,  
bn có thánh xthành các thtc trong SQL và gọi các phương thức đó.  
class FormatQuery  
{
static void Main()  
{
// Data source.  
double[] radii = { 1, 2, 3 };  
// Query.  
IEnumerable<string> query =  
from rad in radii  
select String.Format("Area = {0}", (rad * rad) * 3.14);  
// Query execution.  
foreach (string s in query)  
Console.WriteLine(s);  
// Keep the console open in debug mode.  
Console.WriteLine("Press any key to exit.");  
Console.ReadKey();  
}
}
/* Output:  
Area = 3.14  
Area = 12.56  
Area = 28.26  
*/  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 23  
   
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
V.4.5 Loi các quan htrong thao tác truy vn.  
Để viết truy vn có hiu qu, bn nên hiu loi ca các biến trong mt truy vn  
như thế nào để hoàn tt tt ccác thao tác liên quan đến nhau. Nếu bn hiểu được nhng  
mi quan h, bn sdễ dàng hơn để lĩnh hội các ví dLINQ và đoạn code ví dtrong tài  
liệu hướng dẫn. Hơn nữa, bn shiu nhng gì xảy ra đằng sau nhng hiện trường khi  
các biến được hoàn toàn phân loi cách sdng tkhóa var.  
Thao tác truy vn LINQ được phân loi rõ ràng trong ngun dliu, trong chính  
câu truy vn, và trong thc thi truy vn. Các loi ca các biến trong truy vn phải tương  
thích vi các phn ttrong dliu ngun và vi các loi ca biến lp trong câu lnh  
foreach. Điều này đảm bo rng các loi lỗi đều bbt li ti thi điểm biên dch khi đó  
người ta có thsa lỗi đó trước khi nó được đưa vào làm ứng dng.  
Để gii thích các loi các mi quan h, hu hết các ví dmà làm được sdng  
kiu rõ ràng cho tt ccác biến. Cui cùng ví dcho thấy như thế nào cùng áp dng mt  
nguyên tc ngay ckhi bn sdng tkhóa var.  
V.5.6 Truy vn mà không chuyn hóa các ngun dliu  
Thí dminh ha sau đây cho thấy mt câu truy vn LINQ tới các đối tượng để  
hoạt động mà không thc hin chuyn đổi trên dliu. Ngun cha mt trình tca  
nhng chui và giá trị đầu ra là mt trình tcác chui.  
1. Các loại đối sca các ngun dliệu xác định rõ loi min ca biến.  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 24  
 
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
2. Câu lnh select strvthuc tính Name thay vì hoàn thành đối tượng Customer. Bi  
Name vì là mt chui, các kiu đối sca custNameQuery là chui, không phi  
Customer.  
3. Bi vì custNameQuery là mt trình tcác chui, biến ca vòng lp foreach cũng phải  
là mt chui.  
Thí dụ sau đây cho thấy mt schuyển đổi hơi phc tạp hơn. Câu lnh select trvmt  
kiu nc danh loi mà chcần lưu giữ được hai thành viên của các đối tượng Customer  
gc.  
V.5.7 Trình biên dch phi suy lun ra các loi thông tin  
Mc dù bn nên tìm hiu nhng loi các mi quan htrong mt hoạt động truy vn, bn  
không có tuchọn để cho phép trình biên dch làm tt ccác công vic cho bn. Các từ  
khóa var có thể được sdng cho bt kbiến cc bnào trong mt thao tác truy vn.  
động. Thí dụ sau đây là ví dụ chính xác tương đương với ví dsố 2 đã được tho lun  
phía trên. Skhác nhau duy nht là trình biên dch sẽ được cung cp kiu rõ ràng cho mi  
biến trong hoạt đng truy vn:  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 25  
   
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
V.6 Cú pháp truy vn vs cú pháp phương thc.  
Nói chung, chúng tôi khuyên bn nên sdng cú pháp truy vn vì nó thường là  
đơn giản hơn và hay hơn; tuy nhiên ở đây không có skhác bit gia cú pháp truy vn và  
cú pháp phương th. Ngoài ra, mt struy vn, chng hạn như vic truy lc các phn tử  
phù hp vi một điều kiện xác định, hu hết các truy vn trong LINQ gii thiu trong tài  
liệu hướng dẫn được viết thành văn bản là biu thc truy vn bng cách sdng cú pháp  
truy vn có tính tuyên bố được gii thiu trong C # 3.0. Tuy nhiên,.NET runtime ngôn  
ngchung(CRL_Common Language Runtime) không có ý nim ca cú pháp truy vn  
trong chính nó. Vì vy, ti thời điểm biên dch, biu thc truy vn là thông dch gì đó mà  
CRL, không hiu: gọi các phương thức. Các phương thc này được gi là toán ttruy  
vn chun, và chúng có các tên như Where, Select, GroupBy, Join, Max, Average và  
như vậy trên. Bn có thgi chúng trc tiếp bng cách sdng cú pháp phương thức các  
cú pháp truy vn. Truy lc các phn tcó giá trtối đa trong một mã ngun trình t, chỉ  
có thể được thhiện như các ln gi phương thc. Các tài liu tham kho cho biu thc  
truy vn chun trong namespace System.Linq bi hu hết mọi người sdng cú pháp  
phương thức. Vì vy, ngay ckhi bắt đầu viết truy vn LINQ, nó rt hữu ích để làm quen  
vi cách sdng cú pháp phương thc trong truy vn và toán tthc truy vn.  
V.6.1 Toán ttruy vn chun mrng các phương thc  
Ví dsau cho thy mt cách ddàng biu thc truy vn và các ngữ nghĩa tương đương  
truy vn được viết như là một phương thức da trên truy vn.  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 26  
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
class QueryVMethodSyntax  
{
static void Main()  
{
int[] numbers = { 5, 10, 8, 3, 6, 12};  
//Query syntax:  
IEnumerable<int> numQuery1 =  
from num in numbers  
where num % 2 == 0  
orderby num  
select num;  
//Method syntax:  
IEnumerable<int> numQuery2 = numbers.Where(num => num % 2 == 0).OrderBy(n =>  
n);  
foreach (int i in numQuery1)  
{
Console.Write(i + " ");  
}
Console.WriteLine(System.Environment.NewLine);  
foreach (int i in numQuery2)  
{
Console.Write(i + " ");  
}
// Keep the console open in debug mode.  
Console.WriteLine(System.Environment.NewLine);  
Console.WriteLine("Press any key to exit");  
Console.ReadKey();  
}
}
/*  
Output:  
6 8 10 12  
6 8 10 12  
*/  
Đầu ta thai ví dlà ging ht nhau. Bn có ththy rng các loi ca biến truy  
vn biến là cùng mt trong hai hình thc: IEnumerable (T).  
Để tìm hiểu phương thức da trên câu truy vn, hãy kim tra nó cht chẽ hơn. Ở  
bên phi ca biu thc, chú ý rng chú ý rng mệnh đề where giờ đây không còn được  
thhiện như là một phương thức dụ trên đối tượng numbers, mà là bn sgi li mt loi  
kiu IEnumerable<int> . Nếu bn là quen thuc vi giao din IEnumerable (T), bn biết  
rng nó không có một phương thức where. Tuy nhiên, nếu bn gi trình htrthông  
minh hoàn thành danh sách trong Visual Studio IDE, bn sthy không chlà mt  
phương thức where, nhưng nhiều phương thức khác như: select, SelectMany, Join, và  
Orderby. Đây là tất ccác toán ttruy vn chun.  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 27  
 
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
Mc dù nó có vẻ như nếu giao diện IEnumerable (T) đã được định nghĩa lại để bổ  
xung các phương thức này, trên thc tế cái này không phi là cách. Các toán ttruy vn  
chuẩn được thc hiện như là một loại phương thức mới được gọi là các phương thức mở  
rộng. Các phương thức mrng " extend " mt loi hin có; chúng có thể được gi là nếu  
chúng đã được thhiện các phương thức da trên kiu. Toán ttruy vn chun mrng  
interface IEnumerable (T) và đó là lý do tại sao, bn có thviết numbers.Where (...).  
Để bắt đầu sdng LINQ, bn phi chc chn rng bn thc shiu tt cvcác  
phương thức mrng là làm thế nào để đem chúng vào trong phm vi ng dng ca bn  
bng cách sdụng đúng hướng dn. Điều này được gii thích thêm trong phn làm thế  
o để: To mt dán LINQ.  
V.6.2 Biu thc Lambda  
Trong ví dụ trước, chú ý rng các biu thc điều kin (num% 2 == 0) là thông qua  
như là một trong những đối scủa phương thức where: Where (num => num% 2 == 0).  
Biu thc trong ngoặc được được gi là biu thc lambda. Đó là mt phương thc nc  
danh có thchứa đựng nhng biu thc và các phát biu và có thsdụng để to mt y  
nhim chung hoc mt biu thc cây. Trong C # => là toán tử lambda, được đọc như  
"goes to". Các num bên trái ca các toán tlà yếu tố đầu vào biến đó tương ứng vi num  
trong biu thc truy vn. Trình biên dch có thnhn kiu num bi vì nó biết rng  
numbers là mt kiu chung IEnumerable (T). Toán tlambda chging như các biểu  
thc trong cú pháp truy vn hay trong biu thc C # hoc câu lnh; nó có thbao gm cả  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 28  
   
Đồ án kỹ sư II  
Tìm hiu công nghLINQ và ng dng  
các ln gọi phương thức và các phương thc logic phc tp. The "trvgiá tr" chlà các  
biu thc kết qu.  
Để bắt đầu sdng LINQ, bn không sdng lambdas nhiu. Tuy nhiên, mt số  
truy vn chcó thể được thhin trong cú pháp phương thc và mt syêu cu ca  
nhng biu thc lambda. Sau khi bn trnên quen thuc vi lambdas, bn sthy rng  
nó là mt công cmnh mvà linh hot trong LINQ ca bn.  
Trong don mã ví dụ trước, không phi phương thc OrderBy là dn chng bng  
cách sdng du chấm để gi ti where. Where đưa ra trình tlc, và sau đó Orderby  
có tác dng sp xếp trình tự đó. Bi vì các truy vn trtrvmt IEnumerable, bn  
son chúng trong cú pháp phương thc xích các ln gi phương thc li vi nhau. Đây là  
nhng gì trình biên dch làm ở dăng sau hiện trường khi bn viết truy vn bng cách sử  
dng cú pháp truy vn. Và bi vì mt truy vn biến không lưu trữ các kết quca câu  
truy vn, bn có thể thay đổi nó hay sdụng nó như là cơ sở cho mt truy vn mi bt kỳ  
lúc nào, ngay cả sau khi nó đã được thc hin.  
V.7 Các đc trưng được LINQ htrtrong C#3.0  
Dưới đây là những phn gii thiu nhng ngôn ngmi xây dng trong C # 3.0.  
Mặc dù các tính năng mới tt cả đều được sdụng đến mt mức độ vi các truy vn  
LINQ, chúng không gii hạn đối vi LINQ và có thể được sdng trong bi cnh bt cứ  
nơi bạn tìm thy chúng hu ích.  
V.7.1 Biu thc truy vn.  
Biu thc truy vn sdng cú pháo khai báo tương tự với SQL hay XQuery để  
truy vn trên tp hp IEnumerable. Ti thời điểm biên dch cú pháp truy vấn là phương  
thc gọi đến mt nhà cung cp LINQ ca vic trin khai thc hin ca toán ttruy vn  
chuẩn các phương thức mrng. ng dng kim soát các toán tbiu thc truy vn  
chun trong namespace thích hp vi mt chdn using. Dưới đây là mt biu thc truy  
vn chun làm cho mt mng các chui, nhóm chúng theo ký tự đầu tiên trong chui, và  
phân loi chúng thành mt nhóm.  
var query = from str in stringArray  
Sinh viên thc hin Nguyễn Văn Thy & Hoàng Mnh Gii  
Trang 29  
     

Tải về để xem bản đầy đủ

pdf 123 trang yennguyen 15/05/2025 130
Bạn đang xem 30 trang mẫu của tài liệu "Luận văn Đồ án kỹ sư IITìm hiểu công nghệ LINQ và ứng dụng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfluan_van_do_an_ky_su_iitim_hieu_cong_nghe_linq_va_ung_dung.pdf