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
Lepaskan: 2025-01-31 17:16:10
asal
969 orang telah melayarinya

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.

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;
}
Salin selepas log masuk
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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan