Một truy nã vấn là một diễn tả để lấy dữ liệu từ 1 nguồn dữ liệu nào đó. Các truy vấn thường được dùng trong số ngôn ngữ tầm nã vấn đặc trưng. Những ngôn ngữ tróc nã vấn không giống nhau được phát triển khác nhau để áp dụng cho các nguồn dữ liệu không giống nhau, ví dụ SQL cần sử dụng cho cơ sở dữ liệu quan liêu hệ với XQuery cần sử dụng cho XML. Vị vậy, những nhà phạt triển phải học các ngôn ngữ truy vấn mang lại mỗi dạng nguồn dữ liệu hoặc định dạng dữ liệu. Vị đó, Microsoft mới nghĩ ra việc xây dựng 1 ngôn ngữ truy nã vấn làm sao đó mà có thể cần sử dụng cho tất cả nguồn dữ liệu, tất cả các định dạng dữ liệu không giống nhau. Ngôn ngữ tróc nã vấn đó là LINQ.

Bạn đang xem: Linq

LINQ (Language Integrated Query, tạm dịch là Ngôn ngữ tầm nã vấn tích hợp (viết tắt là LINQ, vạc âm tương tự từ "link" trong tiếng Anh) là một thành phần .NET Framework Microsoft cho phép các khả năng truy nã vấn bản địa (native) tới những ngôn(...)" class="glossaryLink " target="_blank">ngôn ngữ truy nã vấn tích hợp) đưa ra 1 quy mô bền vững để hoạt động với các dạng nguồn dữ liệu với định dạng dữ liệu khác nhau. Vào LINQ, bạn phải làm cho quen với chuyện làm việc với các đối tượng (objects). LINQ chất nhận được dùng những đoạn code đơn giản để truy vấn với chuyển đổi dữ liệu trong số tài liệu XML, cơ sở dữ liệu SQL, tập dữ liệu ADO.NET, các tập hợp .NET, và bất kỳ định dạng nào mà lại LINQ provider hỗ trợ.Ba thành phần của 1 hoạt động truy vấn vấnTất cả các hoạt động truy vấn vấn LINQ đều bao gồm 3 tác vụ:

Kết nối với nguồn dữ liệu (data source)Tạo truy vấn vấnThực thi truy nã vấn

Ví dụ sau đây mô tả biện pháp 3 tác vụ xảy ra lúc thực hiện 1 hoạt động truy hỏi vấn. Để thuận tiện, ví dụ sử dụng 1 mảng số nguyên là nguồn dữ liệu; tuy nhiên bạn gồm thể dùng những dạng nguồn dữ liệu khác.

Xem thêm: Trắc Nghiệm Tin Học 12 Theo Từng Bài Tập Thực Hành Môn Tin Học Lớp 12

class IntroToLINQ static void Main() // cha thành phần của 1 tróc nã vấn LINQ: // 1. Nguồn dữ liệu int<> numbers = new int<7> 0, 1, 2, 3, 4, 5, 6 ; // 2. Tạo truy vấn vấn // numQuery là một trong IEnumerable var numQuery = from num in numbers where (num % 2) == 0 select num; // 3. Tróc nã vấn dữ liệu foreach (int num in numQuery) Console.Write("0,1 ", num); Chúng ta cùng phân tích kỹ lại ví dụ trên:

Nguồn dữ liệu trong ví dụ là mảng số nguyên thương hiệu là numbers gồm 7 phần tử có mức giá trị là 0, 1, 2, 3, 4, 5, 6.Câu truy vấn vấn được tạo bằng biện pháp sử dụng 1 diễn giải Lambda (lambda expression), gần giống như ngôn ngữ tầm nã vấn SQL. Vào trường hợp này bọn họ tạo 1 biến numQuery với kiểu var (kiểu ko xác định kiểu dữ liệu). Câu diễn giải này (from num in numbers where (num % 2) == 0 select num;) tức là chúng ta chọn tất cả các số trong mảng numbers phân chia hết đến 2. Sau khoản thời gian khai báo diễn giải Lambda đến biến numQuery thì ở đây chúng ta có thể hiểu numQuery là 1 danh sách các số chẵn (chia hết mang đến 2), bởi vậy kiểu dữ liệu ngầm của numQuery đó là IEnumerable. IEnumerable là 1 lớp giao diện cơ bản đến tất cả các tập hợp đến thể được liệt kê. Giải pháp dùng phổ biến của IENumerable thường là System.Collections.Generic.IEnumerable với T là kiểu dữ liệu của mỗi đối tượng trong danh sách.Vì biến numQuery dùng diễn giải Lambda cho nên vì vậy kiểu dữ liệu của nó chính là 1 danh sách đối tượng những giá trị phân tách hết cho 2. Bởi vì đó, bọn họ có thể cần sử dụng 1 vòng foreach để truy vấn vấn các giá trị phần tử này cùng in ra màn hình.

Ví dụ trên bao gồm thể mô tả bằng hình ảnh như sau:

*
*

Data Source (nguồn dữ liệu)Trong ví dụ trên, bởi do nguồn dữ liệu là một mảng cho nên vì vậy nó cũng hỗ trợ ngầm lớp giao diện thông thường IEnumerable. Rõ hơn là, nguồn dữ liệu này còn có thể được truy nã vấn bằng LINQ. Một tầm nã vấn thực thi bằng 1 mệnh đề foreach, và foreach cần IEnumerable tuyệt IEnumerable. IEnumerable là 1 trong những giao diện cơ bản hỗ trợ đến tất cả các tập hợp không thông thường nhau (non-generic) mà bao gồm thể được liệt kê, trong những khi đó IEnumerable là giao diện giành cho các tập hợp bình thường nhau (generic). Những dạng hỗ trợ IEnumerable hoặc giao diện kế thừa như IQueryable (generic) gọi là các dạng bao gồm khả năng truy tìm vấn. Một dạng tất cả khả năng truy nã vấn (queryable type) ko cần những thay đổi tốt xử lý đặc biệt để đóng vai trò là 1 trong những nguồn dữ liệu LINQ. Nếu nguồn dữ liệu không sẵn tất cả trong bộ nhớ dưới dạng gồm khả năng truy vấn vấn, LINQ provider phải làm sao thể hiện nó như vậy (tức là phải là dạng có khả năng truy hỏi vấn). Ví dụ sau mô tả bí quyết LINQ chuyển thành XML để tải nội dung 1 tài liệu XML thành dạng bao gồm khả năng truy nã vấn XElement.

// Tạo nguồn dữ liệu từ 1 tập tin XML.// using System.Xml.Linq;XElement contacts = XElement.Load(