LINQ (Language Integrated Query) là một tính năng mạnh mẽ trong C#, cho phép tích hợp các truy vấn dữ liệu trực tiếp vào ngôn ngữ lập trình. Điều này giúp truy cập và thao tác với các nguồn dữ liệu khác nhau như cơ sở dữ liệu SQL, XML, hoặc các bộ sưu tập trong bộ nhớ (collections) một cách nhất quán và hiệu quả.
Contents
1. Giới thiệu về LINQ
LINQ cung cấp cú pháp truy vấn tương tự SQL, tích hợp trực tiếp vào C#, giúp lập trình viên viết các truy vấn dữ liệu một cách tự nhiên và dễ hiểu. Để sử dụng LINQ, cần nạp các namespace sau:
using System.Collections.Generic;
using System.Linq;
2. Các thành phần cơ bản của truy vấn LINQ
- Mệnh đề
from
: Xác định nguồn dữ liệu và biến đại diện cho mỗi phần tử.
var query = from item in collection
...
- Mệnh đề
select
: Chọn các giá trị cần truy xuất trong kết quả.
var query = from item in collection
select item.Property;
- Mệnh đề
where
: Lọc các phần tử dựa trên điều kiện nhất định.
var query = from item in collection
where item.Property == value
select item;
- Mệnh đề
orderby
: Sắp xếp kết quả theo thứ tự tăng dần hoặc giảm dần.
var query = from item in collection
orderby item.Property ascending
select item;
- Mệnh đề
group ... by
: Nhóm các phần tử có cùng giá trị của một thuộc tính.
var query = from item in collection
group item by item.Property;
- Mệnh đề
join
: Kết hợp các nguồn dữ liệu dựa trên một khóa chung.
var query = from item1 in collection1
join item2 in collection2
on item1.Key equals item2.Key
select new { item1, item2 };
3. Ví dụ minh họa
Giả sử có một danh sách các sinh viên, chúng ta sẽ sử dụng LINQ để truy vấn các sinh viên có điểm trung bình lớn hơn 7 và sắp xếp theo tên:
using System;
using System.Collections.Generic;
using System.Linq;
public class SinhVien
{
public string HoTen { get; set; }
public double DiemTrungBinh { get; set; }
}
public class Program
{
public static void Main()
{
var sinhViens = new List<SinhVien>
{
new SinhVien { HoTen = "Nguyen Van A", DiemTrungBinh = 8.5 },
new SinhVien { HoTen = "Tran Thi B", DiemTrungBinh = 6.5 },
new SinhVien { HoTen = "Le Van C", DiemTrungBinh = 7.5 }
};
var query = from sv in sinhViens
where sv.DiemTrungBinh > 7
orderby sv.HoTen
select sv;
foreach (var sv in query)
{
Console.WriteLine($"{sv.HoTen} - {sv.DiemTrungBinh}");
}
}
}
Kết quả:
Le Van C - 7.5
Nguyen Van A - 8.5
4. Lợi ích của việc sử dụng LINQ
- Tính nhất quán: Cung cấp một cú pháp chung để truy vấn nhiều loại nguồn dữ liệu khác nhau.
- Tính an toàn: Các truy vấn được kiểm tra tại thời điểm biên dịch, giảm thiểu lỗi runtime.
- Dễ đọc và bảo trì: Cú pháp truy vấn tương tự SQL giúp mã nguồn dễ hiểu và dễ bảo trì.
Việc nắm vững LINQ sẽ giúp bạn thao tác với dữ liệu trong C# một cách hiệu quả và linh hoạt hơn.