×

Sử dụng LINQ trong C# Truy vấn và xử lý collection phức tạp

 

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.
  • OrderByOrderByDescending: 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, JoinAggregate 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