Bài 1: Sử dụng LINQ để đưa ra danh sách tên các font

 

 

Bài hôm này chúng ta sẽ tìm hiểu về LINQ, bài toán đặt ra là truy vấn ra danh sách các font trong hệ thống

Bước 1: Thiết kế giao diện như dưới
Snap1

 

Xaml:

Snap5

 

Bước 2: cài đặt chương trình như sau, ta sử dụng thư viện : InstalledFontCollection để gọi tên các font

Snap2

 

Nhấn F5 để chạy chương trình

Snap4

Tìm hiểu về LINQ-Phần 1

clip_image001[1]LinQ (Language Intergrated Query) là một công nghệ trên nền tảng .NET, cung cấp một giải pháp hợp nhất cho việc truy vấn dữ liệu, tích hợp cách truy vấn theo cú pháp SQL vào ngôn ngữ lập trình (cụ thể như C# hay VB.NET), áp dụng cho tất cả các dạng dữ liệu từ đối tượng cho đến CSDL quan hệ và cả XML …

clip_image001[1] Việc xử lý thông tin và các thao tác trên dữ liệu là 1 nhiệm vụ hết sức quan trọng, bởi lẽ CSDL có thể nói là Core của tất cả các ứng dụng, và một một trong những trở ngại chính mà các Developer luôn đối mặt đó là sự khác biệc giữa ngôn ngữ lập trình hướng đối tượng và ngôn ngữ truy vấn dữ liệu, càng phức tạp hơn nếu CSDL là XML ….

clip_image001[2] Hiện nay có thể có một số công nghệ hổ trợ việc truy vấn dữ liệu nhưng việc sử dụng hết sức rờm rà, phải qua nhiều thao tác để trả về một kết quả, và bản chất là phải truyền vào những câu lệnh SQL, điều này làm cho thời gian phát triển ứng dụng kéo dài bởi lẽ người lập trình phải tốn thêm khá nhiều thời gian để tiếp cận cách sử dụng, hơn nữa việc xử lý nếu không hay sẽ dể gây chết ứng dụng. Mặc khác, khi các công nghệ này trả về một kết quả sẽ là một DataTable hay DataSet mà không phải là một đối tượng hay một danh sách đối tượng, điều đó sẽ gây khó khăn trong việc quản lý.

clip_image001[3] Nhìn thấy được không chỉ là những vấn đề trên mà còn nhiều vấn đề khác, Microsoft đã cho ra đời công nghệ LINQ, nhằm giải quyết những vấn đề khó khăn trên dữ liệu mà chúng ta đã và đang gặp phải.

I. Những tính năng của LINQ

1. Tổng quan LINQ

1.1 Kiến trúc LINQ

– Như chúng ta đã biết, LINQ là giải pháp tích hợp việc truy vấn dữ liệu vào ngôn ngữ lập trình, trong LINQ kết quả trả tùy vào trường hợp sẽ do lập trình viên xác định, là một : “tập hợp”, “đối tượng” hay những trường dữ liệu của đối tượng.

– Kiến trúc LINQ gói gọn trong sơ đồ sau :

clip_image003

Hình 1. Kiến trúc LINQ

– Từ sơ đồ trên chúng ta thấy rõ rằng ứng dụng VB.NET hay C# dùng LINQ để gọi xuống CSDL và chuyển thành SQL sau đó trả kết quả về là tập hợp, hay đối.

1.2 Sơ đồ tính năng của LINQ

– Ngoài việc tích hợp câu truy vấn vào ngôn ngữ lập trình, LINQ còn có nhiều tính năng rất hay khác như :

o Extension Methods

o Lambda expression

o Object Initializers

o ………….

– Sau đây là minh họa sơ đồ tính năng của LINQ trên 2 ngôn ngữ lập trình VB.NET và C# :

clip_image005

– Để hiểu rõ hơn về sơ đồ tính năng trên, chúng ta hãy xét 1 ví dụ sau :

Query Expression Lambda Expression
var contacts =from c in Customerswhere  c.Country == “Italy”select new {c.Name,c.Phone}; var contacts =Customers .Where(c=>c.Country==”Italy”).Select(c=> new{c.Name,c.Phone})

– Ở cả 2 dạng truy vấn trên đề trả về một tập hợp gồm Name và Phone cũng những Customer ở “Italy”.

– Về mặt ngữ nghĩa, câu truy vấn LINQ hết sức là gần gũi với những cách nói thông thường trong cuộc sống, câu truy vấn ở ví dụ trên chúng ta có thể phát biểu như sau :”từ một phần tử Customer ở Italy hãy lấy thông tin Name, Phone của phần tử đó”.

2. Các khái niệm cơ bản :

2 .1.Automatic Properties

– Tính năng này giúp phát sinh biến cục bộ, do đó lập trình viên không cần phải định nghĩa trong set;get; mà vẫn sử dụng bình thường.

– Ví dụ:

clip_image008

2.2 Anonymous Types:

– Đây là kiểu dữ liệu ngầm định dùng trong LINQ, hay còn gọi là “kiểu dữ liệu nặc danh”.

– Kiểu dữ liệu này không tường minh như Int, String … mà tùy vào câu lệnh LINQ trả về giá trị là một “tập hợp”, hay một “đối tượng” hoặc những trường dữ liệu do lập trình viên định nghĩa v.v

– Xét ví dụ sau :

Snap1

Kết quả:Snap2

– Rõ ràng là ở ví dụ trên đối tượng Sinhvien được sử dụng như là một “đối tượng của một lớp đã được định nghĩa”

2.3 Object Initialization

– Tính năng này giúp chúng ta gán giá trị cho thuộc tính ngay lúc khởi tạo đối tượng .

– Ví dụ :

Snap3

Kết quả:

Snap2

2.4. Query Expression

– Đây là một tính năng rất thường sử dụng trong LINQ, giúp tích hơp câu lệnh SQL vào ngôn ngữ lập trình hướng đối tượng, điều đáng nói là dữ liệu không đơn thuần là chỉ dùng cho dữ liệu SQL Server và còn sử dùng đước với nhiều loại dữ liệu khác vd : một danh sách hay một mảng … một tập dữ liệu.

Snap4 Snap5

Kết quả:

Snap2

– Xét ví dụ trên ở câu lệnh LINQ, chúng ta thấy rất rõ là cú pháp ngược lại với lệnh SQL, theo thứ tự from -> where -> select, thông thường kết quả của lệnh LINQ sẽ trả về một tập hợp, chúng ta phải dùng vòng lập foreach để truy suất từng phần tử trong đó, ở ví dụ trên hàm First() là dùng để trả về một đối tượng đầu tiên tiên

của tập hợp.

– Một số ví dụ khác :

clip_image011
clip_image013
clip_image015

2.5 Lambda Expression

– Đây tính năng khá hay của LINQ, nếu Query Expression là tích hợp lệnh SQL vào ngôn ngữ, thì Lambda là giải pháp thao tác trên dữ liệu thông qua đối tượng.

– Ví dụ :

clip_image017

– Thông qua ví dụ trên chúng ta thấy rõ một điều rằng tương ứng với những lệnh SQL là những phương thức Lampda Expression, cũng như SQL thì những phương thức như Where(); Select() cũng được sử rất dể dàng.

– Có một điểm rất lạ đó là dấu “=>”, tác dụng của dấu này giúp xác định điều kiện cho đối tượng, chúng ta dể dàng hiểu rõ ở những minh họa trên.

Nguồn: Phamnguyenit