English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Opérateur Set Intersect LINQ

L'extension method Intersect nécessite deux ensembles. Il renvoie un nouvel ensemble contenant les éléments communs aux deux ensembles. Voir l'exemple suivant.

Par exemple : l'expression Intersect en syntaxe méthode en C#
IList<string> strList1 = new List<string>() { "Un", "Deux", "Trois", "Quatre", "Cinq" };
IList<string> strList2 = new List<string>() { "Quatre", "Cinq", "Six", "Sept", "Huit"};
var result = strList1.Intersect(strList2);
foreach(string str in result)
        Console.WriteLine(str);
Sortie :
Quatre
Cinq

L'extension method Intersect ne renvoie pas les résultats corrects pour les collections de types complexes. Pour obtenir les résultats corrects de la méthode Intersect, il est nécessaire d'implémenter l'interface IEqualityComparer.

Pour implémenter l'interface IEqualityComparer pour la classe Student, voici :

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();
    }
}

Maintenant, vous pouvez utiliser l'extension de méthode Intersect via la classe StudentComparer pour obtenir le résultat correct :

Exemple : Opérateur Intersect dans 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);
Sortie :
Bill
Ron