Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah LINQ Boleh Menjana Produk Cartesian dengan Cekap daripada Perhubungan Objek Pelbagai Peringkat?
Menghasilkan Produk Cartesian dengan Cekap daripada Perhubungan Objek Pelbagai Peringkat dengan LINQ
Pengaturcaraan berorientasikan objek selalunya melibatkan perhubungan pelbagai peringkat yang rumit. Pertimbangkan contoh ini:
<code class="language-csharp">class Person { public List<Dog> Dogs { get; set; } } class Dog { public List<Puppy> Puppies { get; set; } } class Puppy { public string Name { get; set; } }</code>
Di sini, Person
mempunyai berbilang Dog
s dan setiap Dog
mempunyai berbilang Puppy
s. Cabarannya ialah untuk menjana produk Cartesian—semua kemungkinan kombinasi memilih satu Puppy
daripada setiap Dog
.
SQL tradisional akan menggunakan cantuman. LINQ menawarkan penyelesaian yang lebih elegan. Untuk bilangan tetap Dog
s (dikenali pada masa penyusunan), pertanyaan LINQ yang mudah sudah memadai:
<code class="language-csharp">from p1 in dog1.Puppies from p2 in dog2.Puppies from p3 in dog3.Puppies select new { p1, p2, p3 };</code>
Ini menghasilkan kombinasi seperti:
<code>{p11, p21, p31}, {p11, p21, p32}, {p12, p21, p31}, {p12, p21, p32}</code>
Walau bagaimanapun, apabila bilangan Dog
s adalah dinamik (tidak diketahui pada masa penyusunan), pendekatan yang lebih umum diperlukan. Artikel Eric Lippert (https://www.php.cn/link/f28c49d8be62973ac7716e0b87dae2f9) menyediakan penyelesaian yang mantap untuk senario ini.
Dengan kaedah CartesianProduct
yang sesuai (seperti yang diterangkan dalam artikel Lippert), pertanyaan dipermudahkan kepada:
<code class="language-csharp">CartesianProduct(from dog in person.Dogs select dog.Puppies);</code>
Ini mencapai hasil yang sama. Kuasa ekspresif LINQ membolehkan pengendalian ringkas dan boleh dikekalkan bagi perhubungan objek berbilang peringkat yang kompleks, memudahkan penciptaan produk Cartesian.
Atas ialah kandungan terperinci Bagaimanakah LINQ Boleh Menjana Produk Cartesian dengan Cekap daripada Perhubungan Objek Pelbagai Peringkat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!