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

وظائف LINQ Set运算符 Except

تحتاج طريقة Except() إلى مجموعتين. إنها تعود إلى مجموعة جديدة تحتوي على العناصر من المجموعة الأولى التي لا توجد في المجموعة الثانية (المجموعة المعطاة كمعامل)

IList<string> strList1 = new List<string>(){"One", "Two", "Three", "Four", "Five"};
IList<string> strList2 = new List<string>(){"Four", "Five", "Six", "Seven", "Eight"};
var result = strList1.Except(strList2);
foreach (string str in result)
        Console.WriteLine(str);
الإخراج:
واحد
اثنان
ثلاثة

لا يعود إجراء توسيع Except إلى النتائج الصحيحة للعناصر المعقدة. تحتاج إلى تنفيذ واجهة IEqualityComparer للحصول على النتائج الصحيحة من طريقة Except.

لتحقيق واجهة IEqualityComparer لفئة Student كما يلي:

مثال: استخدام طريقة Except في C#
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();
    }
}

الآن، يمكنك الحصول على النتيجة الصحيحة من إجراء توسيع Except() من خلال فئة StudentComparer:

مثال: باستخدام إجراء Except() لـ نوع الموضوع 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.Except(studentList2, new StudentComparer()); 
foreach(Student std in resultedCol)
    Console.WriteLine(std.StudentName);
الإخراج:
John
Steve

لغة البرمجة C # و VB.Net لا تدعم عمليات الحساب Except. ولكن، يمكنك استخدام طريقة Distinct للعناصر المتغيرة في الاستعلام، أو تضمين الاستعلام برمته داخل أقواس، ثم استدعاء Except ().