English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
The Intersect extension method requires two collections. It returns a new collection that contains the common elements that exist in both collections. See the following example.
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);
Four Five
The Intersect extension method does not return the correct results for complex type collections. To get the correct results from the Intersect method, you need to implement the IEqualityComparer interface.
To implement the IEqualityComparer interface for the Student class, as follows:
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(); } }
Now, you can get the correct result through the Intersect extension method using the StudentComparer class:
Example: Intersect Operator in C#
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);
Bill Ron