Heim > Backend-Entwicklung > C++ > Wie führe ich mit LINQ einen vollständigen äußeren Join auf zwei Listen durch?

Wie führe ich mit LINQ einen vollständigen äußeren Join auf zwei Listen durch?

Linda Hamilton
Freigeben: 2025-01-31 17:16:10
Original
920 Leute haben es durchsucht

How to Perform a Full Outer Join on Two Lists Using LINQ?

linq -all externe Verbindung

<:> Frage:

So verwenden Sie LINQ, um eine vollständige externe Verbindung in den beiden Objektlisten durchzuführen, auch wenn einige Objekte in der Liste vorhanden sind?

Erläuterung:

Interne Verbindung: Elemente mit entsprechenden Schlüssel in den beiden Listen werden beseitigt, um Elemente ohne entsprechende Elemente auszuschließen.

    externe Verbindung (linke Verbindung):
  • Einschließlich der Elemente in der linken Liste gibt es auch in der rechten Liste kein entsprechendes Element. Alle externe Verbindung:
  • einschließlich der Elemente in zwei Listen, ob sie entsprechende Elemente in einer anderen Liste haben.
  • implementieren:
  • Der folgende Code bietet eine allgemeine Erweiterungsmethode, um die gesamte externe Verbindung durchzuführen:
Diese Methode verwendet die folgenden Parameter:

Zwei Listen A und B, um verbunden zu werden.

Geben Sie die Schlüsselanwendung der Objekte in A und B als Verbindungsschlüssel an, die die Schlüsselanwendung der Objekte in A und B ausgewählt hat.

<code class="language-csharp">internal static IEnumerable<TResult> FullOuterJoin<TA, TB, TKey, TResult>(
    this IEnumerable<TA> a,
    IEnumerable<TB> b,
    Func<TA, TKey> selectKeyA,
    Func<TB, TKey> selectKeyB,
    Func<TA, TB, TKey, TResult> projection,
    TA defaultA = default(TA),
    TB defaultB = default(TB),
    IEqualityComparer<TKey> cmp = null)
{
    cmp = cmp ?? EqualityComparer<TKey>.Default;
    var alookup = a.ToLookup(selectKeyA, cmp);
    var blookup = b.ToLookup(selectKeyB, cmp);

    var keys = new HashSet<TKey>(alookup.Select(p => p.Key), cmp);
    keys.UnionWith(blookup.Select(p => p.Key));

    var join = from key in keys
               from xa in alookup[key].DefaultIfEmpty(defaultA)
               from xb in blookup[key].DefaultIfEmpty(defaultB)
               select projection(xa, xb, key);

    return join;
}</code>
Nach dem Login kopieren
Projektfunktionsprojekt, geben Sie an, wie Sie das angeschlossene Element in den Tresult -Typ -Typ umwandeln.

Verwenden Sie diese Werte, wenn in einer anderen Liste kein entsprechendes Element in einer anderen Liste entsprechend Element vorhanden ist.
  • Optionaler Schlüsselvergleich CMP, mit dem der benutzerdefinierte Schlüsselvergleich angeben wird.
  • Verwendung:
  • Um diese Erweiterungsmethode zu verwenden, rufen Sie sie einfach in der ersten Liste A:
  • auf
  • Dies erzeugt die erforderliche Ausgabe:

Das obige ist der detaillierte Inhalt vonWie führe ich mit LINQ einen vollständigen äußeren Join auf zwei Listen durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage