Union operatori murakkab datatypelar toʻplami uchun toʻgʻri natijani qaytarmaydi.
Bu shuni anglatadiki, biz murakkab ma'lumotlar turlari bilan ishlayotganimizda, kutilganidek natijani olish uchun IEqualityComparer interfeysini implement qilishimiz kerak.
Students class uchun IEqualityComparer interfeysini quyidagi tarzda implement qilish mumkin :
Endi to'g'ri natijaga erishish uchun Union metodi usulida StudentComparer sinfidan foydalanishimiz mumkin:
Output:
Union operatori C# va VB.Net Query sintaksisida qo'llab-quvvatlanmaydi.
public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
public int Age { get; set; }
}
class StudentComparer : IEqualityComparer<Student>
{
public bool Equals(Student x, Student y)
{
if (x.StudentID == y.StudentID && x.StudentName.ToLower() == y.StudentName.ToLower())
return true;
return false;
}
public int GetHashCode(Student obj)
{
return obj.StudentID.GetHashCode();
}
}
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.Union(studentList2, new StudentComparer());
foreach(Student std in resultedCol)
Console.WriteLine(std.StudentName);