Bài tập C#

Ghép dữ liệu khách hàng và đơn hàng với LINQ Join trong C#

Trong bài học này, bạn sẽ ghép danh sách khách hàng với danh sách đơn hàng dựa trên mã khách hàng bằng LINQ Join.

Giới thiệu

Dữ liệu liên quan thường được lưu ở các danh sách riêng, ví dụ một danh sách khách hàng và một danh sách đơn hàng. Phương thức Join của LINQ ghép hai danh sách này dựa trên một khóa chung, tương tự như phép JOIN trong cơ sở dữ liệu.

Phương thức Join nhận bốn tham số: danh sách cần ghép, cách lấy khóa từ khách hàng (c => c.Id), cách lấy khóa từ đơn hàng (o => o.CustomerId), và cách tạo kết quả cho mỗi cặp khớp nhau. Mỗi đơn hàng được ghép với đúng khách hàng có cùng mã, cho kết quả Ada: 25 | Lin: 40.

Ví dụ C# chạy được

C#
Chạy code →
Program.cs
using System;
using System.Linq;
record Customer(int Id, string Name);
record Order(int CustomerId, decimal Total);
class Program
{
    static void Main()
    {
        var customers = new[] { new Customer(1, "Ada"), new Customer(2, "Lin") };
        var orders = new[] { new Order(2, 40m), new Order(1, 25m) };
        var rows = customers.Join(orders, c => c.Id, o => o.CustomerId, (c, o) => $"{c.Name}: {o.Total}");
        Console.WriteLine(string.Join(" | ", rows));
    }
}
Kết quả khi chạy
Ada: 25 | Lin: 40

Luyện tập với trình gỡ lỗi

Đặt breakpoint ở một phép gán hoặc điều kiện quan trọng, bấm Debug và xem giá trị các biến cục bộ (local variable) trước khi bước sang dòng tiếp theo.

Luyện tập với thử thách

Áp dụng kiến thức của bài học này để giải một bài toán thực tế. Mỗi thử thách chạy ngay trên trình duyệt, có kiểm thử tức thì và AI nhận xét.

Tất cả thử thách