English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Le tableau suivant liste tous les opérateurs de Set disponibles dans LINQ.
Opérateurs de collection | Utilisation |
---|---|
Distinct | Retourne les valeurs non répétées de l'ensemble. |
Except | Retourne la différence entre les deux séquences, ce qui signifie que les éléments d'un ensemble ne sont pas présents dans le deuxième ensemble. |
Intersect | Retourne l'intersection des deux séquences, c'est-à-dire les éléments apparaissant dans les deux ensembles. |
Union | Retourne les éléments uniques des deux séquences, ce qui signifie les éléments uniques apparaissant dans les deux séquences. |
L'extension de méthode Distinct retourne un nouveau ensemble d'éléments uniques à partir de l'ensemble donné.
IList<string> strList = new List<string>(){ "Un", "Deux", "Trois", "Deux", "Trois" }; IList<int> intList = new List<int>(){ 1, 2, 3, 2, 4, 4, 3, 5 }; var distinctList1 = strList.Distinct(); foreach (var str in distinctList1) Console.WriteLine(str); var distinctList2 = intList.Distinct(); foreach (var i in distinctList2) Console.WriteLine(i);
Un Deux Trois 1 2 3 4 5
L'extension Distinct ne compare pas les valeurs des types complexes. Pour comparer les valeurs des types complexes, il est nécessaire d'implémenter l'interface IEqualityComparer<T>. Dans l'exemple suivant, la classe StudentComparer implémente IEqualityComparer<Student> pour comparer les Student objects.
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 passer l'objet de la classe StudentComparer mentionnée ci-dessus en tant que paramètre à la méthode Distinct() pour comparer les objets Student, comme suit. Exemple : Comparaison des objets avec Distinct en C#
IList<Student> studentList = 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 = 3, StudentName = "Bill", Age = 25 }, new Student() { StudentID = 3, StudentName = "Bill", Age = 25 }, new Student() { StudentID = 3, StudentName = "Bill", Age = 25 }, new Student() { StudentID = 5, StudentName = "Ron" , Age = 19 } }; var distinctStudents = studentList.Distinct(new StudentComparer()); foreach(Student std in distinctStudents) Console.WriteLine(std.StudentName);
John Steve Bill Ron
La syntaxe de requête C# ne prend pas en charge l'opérateur Distinct. Cependant, vous pouvez utiliser la méthode Distinct pour une variable de recherche ou envelopper toute la requête dans des parenthèses, puis appeler Distinct ().
Utilisation du mot-clé Distinct dans la syntaxe de requête VB.Net :
Dim strList = New List(Of string) From {"One", "Three", "Two", "Two", "One"} Dim distinctStr = From s In strList _ Select s Distinct