Bài 1: Giới thiệu về Trình quản lý quảng cáo
1. Giới thiệu về LINQ
1.1. LINQ là gì?
LINQ (Language Integrated Query) là một tập hợp các phương thức truy vấn được tích hợp trực tiếp trong C#, giúp lập trình viên truy vấn dữ liệu từ nhiều nguồn khác nhau như mảng, danh sách, cơ sở dữ liệu, XML một cách dễ dàng và thống nhất.
1.2. Lợi ích của LINQ
- Cú pháp ngắn gọn, dễ đọc
- Tích hợp trực tiếp vào C#, không cần học ngôn ngữ truy vấn riêng biệt
- Tự động kiểm tra kiểu dữ liệu tại thời điểm biên dịch
- Tối ưu hóa hiệu suất truy vấn
2. Các nguồn dữ liệu trong LINQ
- LINQ to Objects: Truy vấn các bộ sưu tập như List, Array
- LINQ to SQL: Truy vấn dữ liệu từ SQL Server
- LINQ to XML: Truy vấn dữ liệu từ tệp XML
- LINQ to Entities: Sử dụng với Entity Framework để làm việc với cơ sở dữ liệu
3. Cú pháp cơ bản của LINQ
Có hai cách viết LINQ phổ biến:
- Query Syntax (Cú pháp truy vấn tương tự SQL)
- Method Syntax (Cú pháp sử dụng phương thức mở rộng - Extension Methods)
3.1. Query Syntax
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evenNumbers = from num in numbers
where num % 2 == 0
select num;
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
3.2. Method Syntax
var evenNumbers = numbers.Where(num => num % 2 == 0);
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
4. Các phương thức phổ biến trong LINQ
4.1. Filtering (Lọc dữ liệu)
var filteredList = myList.Where(x => x.Age > 18);
4.2. Sorting (Sắp xếp dữ liệu)
var sortedList = myList.OrderBy(x => x.Name);
var sortedListDesc = myList.OrderByDescending(x => x.Name);
4.3. Select (Lấy dữ liệu theo trường cụ thể)
var names = myList.Select(x => x.Name);
4.4. Aggregation (Tính toán trên tập dữ liệu)
int count = myList.Count();
double avgAge = myList.Average(x => x.Age);
int maxAge = myList.Max(x => x.Age);
4.5. Grouping (Nhóm dữ liệu)
var groupedData = myList.GroupBy(x => x.Department);
foreach (var group in groupedData)
{
Console.WriteLine($"Department: {group.Key}");
foreach (var item in group)
{
Console.WriteLine(item.Name);
}
}
5. LINQ với Cơ sở dữ liệu (LINQ to SQL, LINQ to Entities)
Sử dụng LINQ với Entity Framework để truy vấn dữ liệu từ SQL Server:
using (var context = new MyDbContext())
{
var employees = context.Employees
.Where(e => e.Age > 25)
.OrderBy(e => e.Name)
.ToList();
foreach (var emp in employees)
{
Console.WriteLine(emp.Name);
}
}
6. LINQ với XML (LINQ to XML)
XDocument doc = XDocument.Load("data.xml");
var students = from student in doc.Descendants("Student")
where (int)student.Element("Age") > 18
select student.Element("Name").Value;
foreach (var name in students)
{
Console.WriteLine(name);
}
7. Kết luận
- LINQ giúp truy vấn dữ liệu dễ dàng và nhất quán
- Cú pháp LINQ đơn giản, dễ hiểu và mạnh mẽ
- Tích hợp với nhiều nguồn dữ liệu khác nhau (Objects, SQL, XML, Entities)
Bài tập: Quản lý danh sách nhân viên bằng LINQ
1. Yêu cầu:
Viết một chương trình C# sử dụng LINQ để quản lý danh sách nhân viên.
Thông tin nhân viên
Mỗi nhân viên có các thuộc tính sau:
- ID (int)
- Họ và tên (string)
- Tuổi (int)
- Chức vụ (string)
- Lương (double)
- Phòng ban (string)
Nhiệm vụ:
- Tạo danh sách nhân viên gồm ít nhất 10 nhân viên với dữ liệu mẫu.
- Lọc danh sách nhân viên có tuổi từ 30 trở lên.
- Sắp xếp nhân viên theo mức lương giảm dần.
- Nhóm nhân viên theo phòng ban và hiển thị danh sách.
- Tính lương trung bình của từng phòng ban.
- Tìm nhân viên có mức lương cao nhất.
- Tạo danh sách chỉ chứa họ tên và chức vụ của nhân viên.
2. Yêu cầu nộp bài
- Viết chương trình C# hoàn chỉnh.
- Nộp file cs hoặc viết trực tiếp trong phần nội dung trả lời