LINQ melaksanakan produk Cartesian
Andaikan anda mempunyai struktur kelas di mana seseorang memiliki berbilang anjing dan setiap anjing mempunyai berbilang anak anjing, dan anda ingin mencari penyelesaian LINQ untuk menjana semua kemungkinan kombinasi anak anjing, satu untuk setiap kombinasi daripada setiap anjing Pilih anak anjing.
Konsep produk Cartesian terpakai di sini, yang melibatkan set pendaraban untuk menghasilkan gabungan unsur yang unik. Walaupun jadual SQL menyediakan penyelesaian mudah untuk ini, LINQ menyediakan pendekatan yang elegan.
Mula-mula, pertimbangkan kes di mana bilangan set (anjing) diketahui pada masa penyusunan. Anda boleh menggunakan pertanyaan LINQ yang mudah:
<code>var combinations = from p1 in dog1.Puppies from p2 in dog2.Puppies from p3 in dog3.Puppies select new {p1, p2, p3};</code>
Pertanyaan ini akan menghasilkan satu siri jenis tanpa nama, setiap jenis mewakili gabungan anak anjing dalam setiap anjing.
Namun, apabila bilangan koleksi tidak diketahui pada masa penyusunan, pendekatan yang lebih dinamik diperlukan. Anda boleh merujuk artikel Eric Lippert untuk mengetahui cara menggunakan LINQ untuk mengira produk Cartesian:
https://www.php.cn/link/f28c49d8be62973ac7716e0b87dae2f9
Selepas mendapat kaedah CartesianProduct:
<code>var combinations = CartesianProduct(from dog in person.Dogs select dog.Puppies);</code>
Ini akan mengembalikan urutan jujukan, di mana setiap jujukan dalam mengandungi gabungan satu anak anjing daripada setiap anjing.
Untuk meringkaskan, sama ada bilangan anjing adalah statik atau dinamik, anda boleh menggunakan LINQ untuk menjana gabungan anak anjing yang diingini.
Atas ialah kandungan terperinci Bagaimanakah LINQ Boleh Menjana Semua Kemungkinan Gabungan Anak Anjing dengan Cekap daripada Berbilang Anjing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!