English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В таблице ниже перечислены все операторы Set, доступные в LINQ.
Операторы набора | Использование |
---|---|
Distinct | Возвращает все уникальные значения в наборе. |
Except | Возвращает разницу между двумя последовательностями, что означает элементы, которые не появляются во втором наборе. |
Intersect | Возвращает交集 двух последовательностей, то есть элементы,出现的 в обоих наборах. |
Union | Возвращает уникальные элементы из двух последовательностей, что означает уникальные элементы,出现的 в обеих последовательностях. |
Метод расширения Distinct возвращает новый уникальный набор элементов из заданного набора.
IList<string> strList = new List<string>{ "One", "Two", "Three", "Two", "Three" }; 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);
One Two Three 1 2 3 4 5
Метод расширения Distinct не сравнивает значения сложных типов объектов. Для сравнения значений сложных типов объектов необходимо реализовать интерфейс IEqualityComparer<T>. В следующем примере класс StudentComparer реализует IEqualityComparer<Student> для сравнения объектов 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(); } }
Теперь вы можете передать объект класса StudentComparer в метод Distinct() в качестве параметра для сравнения объектов Student, как показано ниже. Пример: объекты сравнения Distinct в 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
Синтаксис запроса C# не поддерживает оператор Distinct. Однако, вы можете использовать метод Distinct для переменной или заключить весь запрос в скобки, а затем вызвать Distinct().
Использование ключевого слова Distinct в синтаксисе запроса VB.Net:
Dim strList = New List(Of string) From {"One", "Three", "Two", "Two", "One"} Dim distinctStr = From s In strList _ Select s Distinct