<:> Frage:
Geben Sie zwei Listen von Personal, die IDs und Namen oder Nachnamen enthalten, eine vollständige externe Verbindung an, um eine persönliche Liste mit Namen und Nachnamen zu generieren.
Antwort:
Der Unterschied zwischen der gesamten externen Verbindung und anderen Verbindungen besteht darin, dass sie die Elemente aus zwei Eingablisten enthält, auch wenn in einer anderen Liste kein Übereinstimmungselement vorhanden ist. Aus diesem Grund können wir die Erweiterungsmethode verwenden, und ihr Arbeitsprinzip lautet wie folgt:
Verwenden Sie die angegebene Funktion der Schlüsselauswahlfunktion, um eine Suchentabelle für zwei Eingabelisten zu erstellen.
FullOuterJoin
Identifizieren Sie die eindeutige Taste in den beiden Suchtabellen und kombinieren Sie sie zu einer Sammlung.
Dieser Code gibt die folgenden Ergebnisse aus:
internal static class MyExtensions { 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, 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 let xa = alookup[key].DefaultIfEmpty(default(TA)) let xb = blookup[key].DefaultIfEmpty(default(TB)) select projection(xa.FirstOrDefault(), xb.FirstOrDefault(), key); return join; } }
Diese überarbeitete Antwort verwendet , um die Portal-Nullwerte aus
ordnungsgemäß zu verarbeiten, und gibt den Namen und den Nachnamen direkt aus, wobei das Ergebnis klarer wird. > Odervar ax = new[] { new { id = 1, name = "John" }, new { id = 2, name = "Sue" } }; var bx = new[] { new { id = 1, surname = "Doe" }, new { id = 3, surname = "Smith" } }; ax.FullOuterJoin(bx, a => a.id, b => b.id, (a, b, id) => new { a?.name, b?.surname, id }) .ToList().ForEach(Console.WriteLine);
Das obige ist der detaillierte Inhalt vonWie führe ich einen vollständigen Outer -Join in Linq aus, um zwei Listen von Personen basierend auf der ID zu verschmelzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!