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

عوامل LINQ Distinct

الجدول أدناه يعرض جميع عمليات مجموعة LINQ المتاحة.

عمليات المجموعاتطريقة الاستخدام
Distinct

تعود القيم غير المكررة في المجموعة.

Except

تعود الفرق بين التسلسلين، مما يعني العناصر التي لا تظهر في التسلسل الثاني.

Intersect

تعود الت交汇ة بين التسلسلين، وهي العناصر التي تظهر في كلا التسلسلين.

Union

تعود العناصر الفريدة في كلا التسلسلين، مما يعني العناصر التي تظهر في كلا التسلسلين.

Distinct

طريقة توسيع 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);
الناتج:
واحد
إثنان
ثلاثة
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()، مثلما يلي. مثال: مقارنة الأشياء في 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

دالة Distinct في جملة استعلام

لا يدعم جملة استعلام 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