Maison > développement back-end > C++ > Comment effectuer une jointure extérieure complète sur deux listes à l'aide de LINQ?

Comment effectuer une jointure extérieure complète sur deux listes à l'aide de LINQ?

Linda Hamilton
Libérer: 2025-01-31 17:16:10
original
969 Les gens l'ont consulté

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

Linq -Tall Connexion externe

Question:

Comment utiliser LINQ pour effectuer une connexion externe complète sur les deux listes d'objets, même si certains objets de la liste existent?

Explication:

Connexion interne: Les éléments avec des clés correspondants dans les deux listes sont éliminés pour exclure les éléments sans éléments correspondants.

    Connexion externe (connexion gauche):
  • y compris les éléments de la liste de gauche, il n'y a aucun élément correspondant même dans la liste de droite. Toute connexion externe:
  • y compris les éléments dans deux listes, qu'ils aient des éléments correspondants dans une autre liste.
  • implémenter:
  • Le code suivant fournit une méthode d'extension générale pour effectuer toute la connexion externe:
Cette méthode utilise les paramètres suivants:

Deux listes A et B à connecter.

La clé SelectKeyA et SelectKeyB, spécifiez quelle application d'attribut des objets dans A et B comme clé de connexion.

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;
}
Copier après la connexion
Projet du projet Project, spécifiez comment convertir l'élément connecté en Tresult de type de résultat.

La valeur par défaut facultative defaulta et defaultB, s'il n'y a pas d'élément correspondant dans une autre liste, utilisez ces valeurs.
  • Comparaison des clés facultative CMP, qui est utilisée pour spécifier la comparaison de comparaison des clés personnalisée.
  • Utilisation:
  • Pour utiliser cette méthode d'extension, appelez-la simplement sur la première liste A:
  • Cela générera la sortie requise:

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal