Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk melakukan gabungan luar penuh pada dua senarai menggunakan LINQ?

Bagaimana untuk melakukan gabungan luar penuh pada dua senarai menggunakan LINQ?

Linda Hamilton
Linda Hamiltonasal
2025-01-31 17:16:10994semak imbas

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

linq -semua sambungan luaran

<:> 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.

    Sambungan luaran (Sambungan kiri):
  • Termasuk unsur -unsur dalam senarai kiri, tidak ada elemen yang sepadan walaupun dalam senarai yang betul. Semua sambungan luaran:
  • termasuk unsur -unsur dalam dua senarai, sama ada mereka mempunyai elemen yang sepadan dalam senarai lain.
  • pelaksanaan:
  • Kod berikut menyediakan kaedah lanjutan umum untuk melaksanakan semua sambungan luaran:
Kaedah ini menggunakan parameter berikut:

Dua senarai A dan B untuk disambungkan.

SelectKeya dan SelectKeyB, nyatakan aplikasi atribut objek dalam A dan B sebagai kunci sambungan.

<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>
Projek Fungsi Projek, tentukan cara menukar elemen yang disambungkan ke dalam jenis hasil tresult.

Nilai lalai pilihan DefaultA dan DefaultB, jika tiada elemen yang sepadan dalam senarai lain, gunakan nilai -nilai ini.
  • Perbandingan utama pilihan CMP, yang digunakan untuk menentukan perbandingan perbandingan utama tersuai.
  • Penggunaan:
  • Untuk menggunakan kaedah pengembangan ini, panggil saja pada senarai pertama A:
  • ini akan menghasilkan output yang diperlukan:

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn