Ngôn ngữ LINQ - Toán tử Union
Phương thức Union trong LINQ
Phương thức mở rộng Union 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ử khác nhau ở trong cả hai danh sách.
Ví dụ dưới đây minh họa sử dụng phương thức Union trong LINQ:
IList<string> strList1 = new List<string>() {"One", "Two", "Three", "Four", "Five", "Six" };
IList<string> strList2 = new List<string>() {"Four", "Five", "Six", "Seven", "Eight"};
var result = strList1.Union(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
Four
Five
Six
Seven
Eight
Tương tự như phương thức Distinct, Except và Intersect, phương thức mở rộng Union 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 Union.
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 Union để 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 Union 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 },
new Student() { StudentID = 6, StudentName = "July" , Age = 18 }
};
var resultedCol = studentList1.Union(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
Bill
Ron
July