<:> Soalan:
Bagaimana menggunakan LINQ untuk melakukan sambungan luaran penuh pada dua senarai objek, walaupun beberapa objek dalam senarai ada?
Penjelasan:
Sambungan dalaman: unsur -unsur dengan kekunci yang sepadan dalam kedua -dua senarai dihapuskan untuk mengecualikan unsur -unsur tanpa unsur -unsur yang sepadan.
Dua senarai A dan B untuk disambungkan.
SelectKeya dan SelectKeyB, nyatakan aplikasi atribut objek dalam A dan B sebagai kunci sambungan.
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; }
Nilai lalai pilihan DefaultA dan DefaultB, jika tiada elemen yang sepadan dalam senarai lain, gunakan nilai -nilai ini.
Atas ialah kandungan terperinci Bagaimana untuk melakukan gabungan luar penuh pada dua senarai menggunakan LINQ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!