Ngôn ngữ truy vấn tích hợp

**Ngôn ngữ truy vấn tích hợp** (tiếng Anh: *Language Integrated Query*, viết tắt *LINQ*) là một thành phần của .NET và .NET Framework cung cấp khả năng truy vấn cấp độ ngôn ngữ và cùng các hàm API truy vấn bậc cao trên C# và Visual Basic.

## Cú pháp lệnh LINQ
Cú pháp lệnh LINQ có nhiều điểm tương đồng với ngôn ngữ truy vấn SQL nhưng được tích hợp gốc (native) trong ngôn ngữ lập trình. Lệnh truy vấn trên LINQ trên C# có dạng:

```c#
var linqExperts = from p in programmers
                  where p.IsNewToLINQ
                  select new LINQExpert(p);
```
Trên ngôn ngữ Visual Basic:
```vb.net
Dim countries = From cust In customers
                Order By cust.Country, cust.City
                Group By CountryName = cust.Country
                Into CustomersInCountry = Group, Count()
                Order By CountryName
```
Nói chung LINQ hỗ trợ hầu hết các Toán tử truy vấn tiêu chuẩn (SQO) như *Select*, *Where*, *Group by*...

## Kết nối LINQ to SQL
Trong LINQ to SQL, mô hình dữ liệu của cơ sở dữ liệu quan hệ được ánh xạ tới mô hình đối tượng được và được truy vấn thao tác trên Ngôn ngữ truy vấn tích hợp ngay trong C# hoặc VB.NET. Khi ứng dụng chạy, LINQ to SQL tự động dịch sang ngôn ngữ SQL các truy vấn được tích hợp Ngôn ngữ truy vấn tích hợp và gửi chúng đến cơ sở dữ liệu để thực thi. Khi cơ sở dữ liệu trả về kết quả, LINQ to SQL lại dịch chúng trở lại các đối tượng mà bạn có thể làm việc bằng ngôn ngữ lập trình của riêng mình.

```c#
// Kết nối đến CSDL thông qua DataContext
DataContext db = new DataContext(@"c:\linqtest\northwnd.mdf");

// Tạo kiểu bảng Customer để phục vụ truy vấn
Table<Customer> Customers = db.GetTable<Customer>();

// Truy vấn đến bảng dữ liệu Customer để tìm các khách hàng từ London
IQueryable<Customer> custQuery =
    from cust in Customers
    where cust.City == "London" 
    select cust;
```


## Kết nối LINQ to XML
*LINQ to XML* cung cấp giao diện lập trình XML trong bộ nhớ giúp Truy vấn tích hợp ngôn ngữ trên.NET (LINQ) thao tác trên các dữ liệu dạng XML. LINQ to XML cung cấp khả năng cho phép.NET có thể cập nhật, cấu trúc lại và truy vấn dữ liệu ở dạng Mô hình đối tượng văn bản (DOM).

```c#
// Lấy thông tin từ tệp văn bản dạng XML (PurchaseOrder.xml) chứa dữ liệu về đơn hàng đã thanh toán
var filename = "PurchaseOrder.xml";
var currentDirectory = Directory.GetCurrentDirectory();
var purchaseOrderFilepath = Path.Combine(currentDirectory, filename);

XElement purchaseOrder = XElement.Load(purchaseOrderFilepath);

IEnumerable<string> partNos =  from item in purchaseOrder.Descendants("Item")
                               select (string) item.Attribute("PartNumber");
```


## Ngôn ngữ truy vấn tích hợp song song
Ngôn ngữ truy vấn tích hợp song song (PLINQ) là một triển khai song song của Truy vấn tích hợp ngôn ngữ (LINQ) để tận dụng sức mạnh của lập trình song song (parallel programming). PLINQ triển khai tập hợp đầy đủ các toán tử truy vấn tiêu chuẩn như LINQ ngoài ra còn có các toán tử bổ sung cho các hoạt động song song. PLINQ kết hợp sự đơn giản và dễ đọc của cú pháp LINQ với sức mạnh của lập trình song song.

```c#
// Thực hiện truy vấn song song 
var query = from item in source.AsParallel().WithDegreeOfParallelism(2)
            where Compute(item) > 42
            select item;
```


## Tham khảo