Maison >développement back-end >C++ >Comment effectuer une jointure extérieure complète sur deux listes à l'aide de LINQ?
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.
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.
<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>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.
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!