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

Opérateur Set LINQ Union

L'extension de méthode Union nécessite deux ensembles et renvoie un nouvel ensemble contenant des éléments différents des deux ensembles. Voir l'exemple suivant.

IList<string> strList1 = new List<string>() { "Un", "Deux", "trois", "Quatre" };
IList<string> strList2 = new List<string>() { "Deux", "TROIS", "Quatre", "Cinq" };
var result = strList1.Union(strList2);
foreach (string str in result)
        Console.WriteLine(str);
Sortie :
Un
Deux
trois
TROIS
Quatre
Cinq

L'extension de méthode Union ne peut pas renvoyer des résultats corrects pour des collections de types complexes. Vous devez implémenter l'interface IEqualityComparer pour obtenir des résultats corrects à partir de la méthode Union.

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

Exemple : utilisation de l'opérateur d'union d'IEqualityComparer :
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)
    {
        si (x.StudentID == y.StudentID et x.StudentName.ToLower() == y.StudentName.ToLower())
            return true;
        return false;
    }
    public int GetHashCode(Student obj)
    {
        return obj.StudentID.GetHashCode();
    }
}

Maintenant, vous pouvez passer la classe StudentComparer ci-dessus à l'extension method Union pour obtenir le résultat correct :

Exemple : opérateur Union - 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.Union(studentList2, new StudentComparer()); 
foreach(Student std in resultedCol)
    Console.WriteLine(std.StudentName);
Sortie :
John
Steve
Bill
Ron

Syntaxe de requête

La syntaxe de requête C # & VB.Net ne prend pas en charge les opérateurs de union. Cependant, vous pouvez utiliser la méthode Union pour les variables de requête, ou envelopper l'ensemble de la requête dans des crochets et appeler Union ().