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.
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; }
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!