Schneiden mit einer benutzerdefinierten IEqualityComparer mit Linq

Lange Geschichte kurz: ich habe 2 collections von Objekten. Eine enthält gute Werte (nennen wir es mal "Gute"), die andere default-Werte (Mr. "Default"). Ich möchte die Schnittmenge der Union zwischen Gut und Standard, und Standard. In anderen Worten: Intersect(Union(Fein, Standard), Standard). Man könnte denken, es löst als Standard, aber hier ist, wo es kompliziert : ich benutze eine benutzerdefinierte IEqualityComparer.

Habe ich die folgenden Klassen :

class MyClass
{
    public string MyString1;
    public string MyString2;
    public string MyString3;
}

class MyEqualityComparer : IEqualityComparer<MyClass>
{
    public bool Equals(MyClass item1, MyClass item2)
    {
        if(item1 == null && item2 == null)
            return true;
        else if((item1 != null && item2 == null) ||
                (item1 == null && item2 != null))
            return false;

        return item1.MyString1.Equals(item2.MyString1) &&
               item1.MyString2.Equals(item2.MyString2);
    }

    public int GetHashCode(MyClass item)
    {
        return new { item.MyString1, item.MyString2 }.GetHashCode();
    }
}

Hier sind die Merkmale meiner Kollektionen Gut und Standard-Kollektionen :

Standard : Es ist ein großes set, mit allen wollte { MyString1, MyString2 } - Paaren, aber die MyString3 Werte sind, wie Sie sich vorstellen können, werden default-Werte.

Gut : Es ist eine kleinere Gruppe, die hauptsächlich Elemente, die in der Standard-set, aber mit einigen guten MyString3 Werte. Es hat auch einige { MyString1, MyString2 }, die außerhalb der gesuchten gesetzt.

Was ich tun möchte, ist diese : Nehmen Sie nur die Elemente aus dem Guten, sind in Standard -, aber fügen Sie die anderen Elemente in Verzug.

Hier ist, was ich denke, ist, mein bestes versuchen :

HalfWantedResult = Good.Union(Default, new MyEqualityComparer());
WantedResult= HalfWantedResult.Intersect(Good, new MyEqualityComparer());

Ich gelehrt, es sollte gearbeitet haben, aber das Ergebnis bekomme ich im Grunde nur das gute { MyString1, MyString2 } - Paaren festgelegt, aber alle aus dem Standard-set, so habe ich den default-Wert alle über. Ich habe auch versucht, die Umschaltung des Standard-und des Guten in der letzten Überschneiden, aber ich bekomme das gleiche Ergebnis.

InformationsquelleAutor der Frage Tipx | 2010-12-02

Schreibe einen Kommentar