Ngôn ngữ LINQ - Toán tử Except
Phương thức Except trong LINQ
Phương thức mở rộng Except yêu cầu đầu vào là hai danh sách. Nó trả về một danh sách mới với các phần tử từ danh sách đầu tiên không tồn tại trong danh sách thứ hai.
Ví dụ dưới đây minh họa sử dụng phương thức Except trong LINQ:
IList<string> strList1 = new List<string>() {"One", "Two", "Three", "Four", "Five" };
IList<string> strList2 = new List<string>() {"Four", "Five", "Six", "Seven", "Eight"};
var result = strList1.Except(strList2);
foreach(string str in result)
Console.WriteLine(str);
Đây là kết quả khi biên dịch và thực thi chương trình:
One
Two
Three
Tương tự như phương thức Distinct, phương thức mở rộng Except cũng không trả về kết quả chính xác cho các danh sách có kiểu phức tạp. Bạn cần triển khai interface IEqualityComparer<T>
để có được kết quả chính xác khi sử dụng phương thức Except.
Bạn có thể sử dụng lại lớp StudentComparer được định nghĩa ở phương thức Distinct cho phương thức mở rộng Except để có kết quả chính xác.
Ví dụ dưới đây minh họa sử dụng lớp StudentComparer làm đối số cho phương thức Except trong LINQ:
IList<Student> studentList1 = new List<Student>()
{
new Student() { StudentID = 1, StudentName = "John", Age = 18 },
new Student() { StudentID = 2, StudentName = "Steve", Age = 15 },
new Student() { StudentID = 3, StudentName = "Bill", Age = 25 },
new Student() { StudentID = 5, StudentName = "Ron" , Age = 19 }
};
IList<Student> studentList2 = new List<Student>()
{
new Student() { StudentID = 3, StudentName = "Bill", Age = 25 },
new Student() { StudentID = 5, StudentName = "Ron" , Age = 19 }
};
var resultedCol = studentList1.Except(studentList2, new StudentComparer());
foreach(Student std in resultedCol)
Console.WriteLine(std.StudentName);
Đây là kết quả khi biên dịch và thực thi chương trình:
John
Steve