LINQ (Language Integrated Query) trong C# giúp truy vấn và thao tác trên các collection phức tạp một cách dễ dàng và hiệu quả. LINQ cung cấp các phương thức truy vấn phong phú cho các collection như List
, Array
, Dictionary
, và các nguồn dữ liệu khác. Dưới đây là một hướng dẫn chi tiết về cách sử dụng LINQ để truy vấn dữ liệu trong các collection phức tạp:
1. Các Thành Phần Cơ Bản của LINQ
- Where: Lọc các phần tử dựa trên điều kiện.
- Select: Chọn và chiếu các phần tử thành một hình thức khác.
- OrderBy và OrderByDescending: Sắp xếp các phần tử.
- GroupBy: Nhóm các phần tử.
- Join: Kết hợp các nguồn dữ liệu.
- Aggregate: Thực hiện các phép tính trên các phần tử.
2. Ví Dụ Minh Họa
Tạo Dữ Liệu Mẫu
Giả sử chúng ta có một danh sách các sinh viên và danh sách các khóa học họ đã đăng ký:
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public List<int> CourseIds { get; set; }
}
public class Course
{
public int Id { get; set; }
public string Name { get; set; }
}
// Tạo dữ liệu mẫu
List<Student> students = new List<Student>
{
new Student { Id = 1, Name = "Alice", CourseIds = new List<int> { 1, 2 }},
new Student { Id = 2, Name = "Bob", CourseIds = new List<int> { 2, 3 }},
new Student { Id = 3, Name = "Charlie", CourseIds = new List<int> { 1, 3 }},
};
List<Course> courses = new List<Course>
{
new Course { Id = 1, Name = "Math" },
new Course { Id = 2, Name = "Science" },
new Course { Id = 3, Name = "History" },
};
Lọc Dữ Liệu với Where
Lọc ra các sinh viên đăng ký học môn "Math":
var mathStudents = students.Where(s => s.CourseIds.Contains(1)).ToList();
Chọn và Chiếu với Select
Lấy danh sách tên sinh viên:
var studentNames = students.Select(s => s.Name).ToList();
Sắp Xếp Dữ Liệu với OrderBy
Sắp xếp sinh viên theo tên:
var sortedStudents = students.OrderBy(s => s.Name).ToList();
Nhóm Dữ Liệu với GroupBy
Nhóm các sinh viên theo số lượng khóa học họ đăng ký:
var groupedStudents = students.GroupBy(s => s.CourseIds.Count)
.Select(g => new { CourseCount = g.Key, Students = g.ToList() })
.ToList();
Kết Hợp Dữ Liệu với Join
Lấy danh sách các sinh viên cùng với tên các khóa học họ đăng ký:
var groupedStudents = students.GroupBy(s => s.CourseIds.Count)
.Select(g => new { CourseCount = g.Key, Students = g.ToList() })
.ToList();
Thực Hiện Phép Tính với Aggregate
Tính tổng số lượng khóa học mà tất cả các sinh viên đã đăng ký:
var studentCourses = from student in students
from courseId in student.CourseIds
join course in courses on courseId equals course.Id
select new { StudentName = student.Name, CourseName = course.Name };
foreach (var item in studentCourses)
{
Console.WriteLine($"Student: {item.StudentName}, Course: {item.CourseName}");
}
Tổng Kết
Sử dụng LINQ trong C# giúp đơn giản hóa việc truy vấn và thao tác trên các collection phức tạp. Các phương thức như Where
, Select
, OrderBy
, GroupBy
, Join
và Aggregate
cung cấp một cách tiếp cận mạnh mẽ và linh hoạt để xử lý dữ liệu. Bằng cách kết hợp các phương thức này, bạn có thể dễ dàng truy vấn và xử lý các dữ liệu phức tạp trong ứng dụng của mình.
Comments