Ngôn ngữ LINQ - Toán tử Intersect
Phương thức Intersect trong LINQ
Phương thức mở rộng Intersect 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ồn tại trong cả hai danh sách.
Ví dụ dưới đây minh họa sử dụng phương thức Intersect 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.Intersect(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:
Four
Five
Tương tự như phương thức Distinct và Except, phương thức mở rộng Intersect 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 Intersect.
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 Intersect để 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 Intersect 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.Intersect(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:
Bill
Ron